Vous pouvez vous rendre sur l'espace dédié aux généralités sur python : Espace python 1
Nous avons manipulé des variables avec des types simples : int, bool, float, str. Ce sont des conteneurs ne contenant qu'une valeur.
Il existe également des types de données que l'on appelle séquence. Nous allons étudier deux types de séquence
: les tableaux et les p-uplets. En python, les tableaux s'appellent les listes et les p-uplets s'appellent les tuples.
Séquence
Famille indexée d'éléments par les entiers strictement positifs inférieurs ou égaux à un certain entier, ce dernier étant appelé « longueur » de la séquence. Il faut rapprocher ce mot au concept de suite en mathématiques.
En informatique, un tableau
est une structure de données représentant une séquence
finie d'éléments auxquels on peut accéder efficacement par leur position, ou indice, dans la séquence. C'est un type de conteneur
que l'on retrouve dans un grand nombre de langages de programmation.
En Python, une séquence est une collection ordonnée d’objets qui permet d’accéder à ses éléments par leur numéro de position dans la séquence. Les listes et les tuples sont des séquences.
Il y a des points communs et des différences entre ces deux types.
p-uplet, tuple en python
Un p-uplet est une séquence immutable. C'est à dire une suite indexée de valeurs (de n'importe quel type) que l'on ne peut pas modifier.
En Python, un p-uplet est de type tuple.
Construire un objet tuple en python.
Un tuple est défini à l'aide de parenthèses.
tup1=()
tup2=(3,) # tuple avec un seul élément
tup3=(1,4,5,'moto',4.6)
type(tup1) # pour accéder au type de l'objet
Vous avez à disposition un "bac à sable" pour vos tests.
Vous pouvez également utiliser jupyter ou la méthode qui vous convient le plus.
Il est important d'alimenter son cahier de bord.
accéder à un élément
Soient i
un entier et t
un tuple
i
d'un tuple t
on écrit
t[i]
t
en Python est accessible avec l'index -1
t[-1]
t[i:j+1]
pour afficher les élément de deux en deux on pourra écrire :
t[i:j+1:2]
on donne le tuple suivant : tup=(1,4,5,'moto',(12,'nsi','génial'),4.6)
Ecrire les lignes de code qui affiche :
Un tuple est un objet immutable : on ne peut pas réaffecter ses éléments, supprimer un élément ou encore en ajouter.
Tester ces deux lignes de codes :
tup=(1,4,5,'moto',4.6)
tup[3]='vive la moto !'
Un tuple est itérable. Cela signifie que l'on peut organiser une itération (boucle for) sur cette structure.
Tester les exemples suivants :
tup=(5,4,2,8,"moto")
for elt in tup : # méthode 1, elt prend à chaque tour les éléments de la séquence
print(elt) # print est utilisée à des fins d'observation de code
for i in range(len(tup)): # méthode 2, on parcourt les indices de la séquence
print(tup[i])
Opérations/méthodes | Description |
Méthodes et opérations communes aux listes et tuples. | |
x in s |
Renvoie True si un élément de s est égale à x, False sinon |
x not in s |
Renvoie True si aucun un élément de s n'est égale à x, False sinon |
len(s) |
Renvoie le nombre d'éléments de s |
s == s1 |
Renvoie True si s et s1 sont de même type, ont la même longueur,et ont des éléments égaux deux à deux. |
s[i] |
Renvoie l'élément d'indice i de s. Le premier élément a pour indice 0. |
s[i:j] |
Renvoie une partie de l'indice i à j non inclus |
s.index(x) |
Renvoie l'indice de la première apparition de x dans s |
s.count(x) |
Renvoie le nombre d'apparitions de x dans s |
s+t |
Renvoie une nouvelle séquence concaténation de s et t. |
n*t |
Renvoie une nouvelle séquence composée de la concaténation de t avec lui même n fois. |
En utilisant le code ci-dessous, vous utiliserez les méthodes et les opérations du tableau pour tester les différentes questions :
jours_1=('lundi','mardi','mercredi','jeudi','vendredi')
jours_2=('samedi','dimanche')
# Tester si samedi est un élément de jours_1
# Donner la longueur de jours_2
# Tester si jours_1 est égal à jours_2
# Donner le deuxième élément de jours_1
# Donner la partie de jours_1 entre le deuxième élément et le quatrième élément
# renvoyer l'indice de dimanche dans jours_2
# Renvoyer le nombre de samedi dans jours_2
# Créer un tuple semaine par concaténation de jours_1 et de jours_2
En utilisant un parcours de tuple avec la présence d'un indice, écrire une fonction
est_dans(element,tple)
qui en argument reçoit un entiers ( élément) et un tuple d'entier ( tple) qui renvoie un booleen indiquant la présence de élément dans tple.
on testera la fonction sur les scripts suivants :
est_dans(4,(1,2,3,4,5,6))
qui devrait renvoyer True
est_dans(9,(1,2,3,4,5,6))
qui devrait renvoyer False
import random
tple=()
for i in range(1000):
r=random.randint(1,1000)
tple=tple+(r,)
est_dans(400,tple)
Avez vous tous le même retour?
En Python, une fonction qui renvoie plusieurs éléments ( ex : return a,b,c ) renvoie un tuple.
def milieu(xA,yA,xB,yB) -> tuple:
"Formule qui renvoie les coordonnées du milieu d'un segment"
return (xA+xB)/2, (yA+yB)/2
type(milieu(1,3,-1,2))
En utilisant milieu(1,3,-1,2), comment afficher seulement l'abscisse ? L'ordonnée
?
Ecrire une fonction triangle_rect(n)
qui renvoie un tuple où chaque élément est un tuple de longueur trois, ces tuples sont constitués de trois entiers a, b,c tels que $0<a\leq b\leq c < n$ et le triangle de cotés $a$, $b$
et $c$ soit rectangle. Le tuple renvoyé doit contenir tous les triplets possibles.
Par exemple triangle_rect(20)
renvoie le tuple ((3, 4, 5), (5, 12, 13), (6, 8, 10), (8, 15, 17), (9, 12, 15))
Tableau
Un tableau est une séquence mutable.
type list en Python
Une liste en Python est une séquence mutable de longueur variable.
On peut appliquer aux listes toutes les méthodes, fonctions et opérations des tuples.
une liste est définie à l'aide de crochets.
Pour initialiser en mémoire une liste vide on écrira : l=[]
Tester les exemples suivants :
liste=[5,4,2,8,"moto"]
liste.append(35) # Ajout d'un élément à la fin de la liste
print(liste) # print est utilisée à des fins d'observation de code
liste[2]= 5 # Modification de l'élément d'indice 2
print(liste)
# reprendre les exemples du dessus avec un tuple
tup=(1,4,9,7,"moto",4.5)
# Vous allez rencontrer des messages d'erreur
La méthode append
permet d'ajouter à la fin d'une liste existante un élément. On écrira :
l.append(element_a_ajouter)
liste=[3,8,"mot",True]
liste2=[] # Création d'une liste vide
liste2.append(4)
# Afficher la liste2
liste=[3,8,"mot",True]
liste1=[2*x for x in range(10)]
liste2=[2*x+1 for x in range(10)]
liste3=[x**2 for x in range(10)]
import math
liste4=[math.sqrt(x) for x in liste3]
# Afficher les différentes listes
Dans cet exercice, vous devez écrire deux scripts Python qui créent la liste des entiers de 0 à 10000 de deux méthodes différentes :
Tableaux et fonctions
Tester les exemples suivants :
def test(a :list)->list :
return [x**2 for x in a if x>0],[x for x in a if x>10]
a=[-4,-3,-2,0,1,5,9,11]
Opérations/méthodes | Description |
Méthodes et opérations communes aux listes et tuples. | |
x in s |
Renvoie True si un élément s est égale à x, False sinon |
x not in s |
Renvoie True si aucun un élément de s n'est égale à x, False sinon |
len(s) |
Renvoie le nombre d'éléments de s |
s == s1 |
Renvoie True si s et s1 sont de même type, ont la même longueur,et ont des éléments égaux deux à deux. |
s[i] |
Renvoie l'élément d'indice i de s. Le premier élément a pour indice 0. |
s[i:j] |
Renvoie une partie de l'indice i à j non inclus |
s.index(x) |
Renvoie l'indice de la première apparition de x dans s |
s.count(x) |
Renvoie le nombre d'apparitions de x dans s |
s+ t |
Renvoie une nouvelle séquence concaténation de s et t. |
n*t |
Renvoie une nouvelle séquence composée de la concaténation de t avec lui même n fois. |
Méthodes et opérations applicables aux listes (mais pas aux tuples). | |
s.append(x) |
Ajoute l'élément x à la fin de la liste s. |
s[i] = x |
Modifie la liste et affecte la valeur x à la case d'indice i. Attention, cette case doit exister. |
s.insert(i,v) |
Insère l'élément x dans s à l'indice i . Cette méthode décale les indices suivants. |
s.remove(x) |
Supprime de la liste le premier élément dont la valeur est égale à x |
s.pop(i) |
Enlève de la liste l'élément à la position i et renvoie sa valeur. En l'absence de i, c'est le dernier élément qui est supprimé et renvoyé |
s.sort() |
Modifie la liste s en la triant |
s.reverse() |
Modifie la liste en inversant l'ordre des éléments de s |
# -*- coding: utf-8 -*-
import random
liste=[random.randint(1,6) for i in range(1000)] # Comprendre la construction de cette liste
Ecrire un script Python qui renvoie une liste contenant le nombre de 1,2,3,4,5 et 6. (on utilisera la méthode count
.)
Ecrire une fonction "count" sans "count"
compter(element,liste)
qui a pour arguments un entier (element) et une liste d'entiers (liste) qui renvoie le nombre d'occurrence de élément dans liste.Les éléments d'un tableau peuvent être également un tableau. Ce type d'objet rappelle un objet mathématiques que vous verrez plus tard qui s'appelle une matrice. Cet objet est utilisé dans de nombreux domaines, notamment dans le traitement des images. Une image est une matrice de pixels.
Matrices
On appelle matrice un tableau de tableaux dont chaque tableau à la même longueur.
Chaque élément d'une matrice A est noté $a_{i,j}$ où $i$ est le numéro de ligne et $j$ le numéro de colonne.
On représente une matrice de taille n,m en mathématiques ainsi :
$A = \begin{pmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \cdots & a_{m,n} \end{pmatrix}$
En Python, une matrice est une liste de listes de même longueur.
Pour accéder à un élément organisé en liste de liste, on utilise une notation avec un double crochets. Le premier indice pointe la ligne et le deuxième indice pointe la colonne.
Si notre matrice contient n listes de m éléments on peux la voir ainsi :
$List= \begin{pmatrix} List[0][0] & List[0][1] & \cdots & List[0][n-1] \\ List[1][0] & List[1][1] & \cdots & List[1][n-1] \\ \vdots & \vdots & \ddots & \vdots \\ List[m-1][0] & List[m-1][1] & \cdots & List[m-1][n-1] \end{pmatrix}$
Pour accéder à l'élément j de la ième liste de L on écrira :
L[i][j]
L=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Ici , L[1][2]=7
L=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Le premier élément de la liste L est la liste [1,2,3,4], pour l'afficher on écrit : L[0]
.
Le troisième élément de ce L[0] est 3, pour y accéder nous utiliserons L[0][2]
L[2][3]
.On peux se servir de données structurées en liste de listes sans que ce soit des matrices.
Ecrire une fonction matriceAlea(n:int,m:int)->list
Python qui renvoie une matrice à n lignes et m colonnes d'entiers aléatoires entre 0 et 100.
Le but de cet exercice est de représenter un jeu de 32 cartes.
Un jeu de 32 cartes est composé de :
Le but est d'implémenter un jeu de 32 cartes et se doter de fonctions qui permettent interagir avec ce jeu.
creation_jeu32(couleur:tuple, valeur32:tuple)->list
docstring
, entre " "
, ou entre
""" """
" (si l'aide fait plusieurs lignes).creation_jeu32(couleur:tuple, valeur32:tuple)->list
qui retourne une liste de 32 cartes.
melange(jeu:list)->list
qui renvoie le jeu de cartes mélangé.
carte_hasard(jeu:list)->tuple
main(nombre_cartes: int,jeu:list)->list:
qui renvoie une main formée du nombre de cartes. Il faut penser à
retirer la main créée du jeu de 32 cartes.
On veut pouvoir comparer des cartes pour réaliser par exemple des jeux.
force(carte:tuple)->int:
qui renvoie la "force" de la carte.
jeu_force(jeu)
qui renvoie le jeu des cartes associées à leur force .compare(carte1:tuple,carte2:tuple,jeu_force:dict)->tuple
qui renvoie la carte avec la force la plus élevée.distance(carte1:tuple,carte2:tuple)->int
qui renvoie la "distance" entre deux cartes.Le prolongement de cette activité est la création d'un jeu (bataille, rami, blackjack, poker, pyramide, etc.). La création d'un jeu pourra être développée dans le cadre de votre projet.
Faire une recherche sur le web sur la notion de carré magique. Un carré magique d'ordre 3 est une matrice de 3 lignes et trois colonnes dont la somme des lignes, des colonnes et des diagonales fait le même nombre.
L=[ [2,7,6],
[9,5,1],
[4,3,8]]
Ecrire un script Python qui vérifie que ce carré est magique. Le prolongement de cet exercice est la recherche de carrés magiques à partir de carrés à compléter.
Python considère une phrase comme une séquence. Vous pouvez réaliser des essais avec cette citation célèbre du philosophe Confusius : "Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions." De quelle type de séquence se rapproche-t-on? De la liste et/ou du tuple ? Faire des tests à partir de vos connaissances en python.
# -*- coding: utf-8 -*-
citation="Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions."
# Quelques tests à faire :
citation[3]
citation[4]='z'
citation.append('!')
# En chercher d'autres
En utilisant la méthode count(elt)
, compter le nombre de 'a' dans la citation, le nombre de 'e', le nombre de voyelles, etc.
Il existe pour les listes des méthodes très intéressantes dans le traitement des chaînes de caractères. Ce sont les méthodes split()
et join()
. Observer le code proposé et réaliser les affichages des listes créées.
Penser à également utiliser la commande type(variables) afin de vérifier le type des variables créées.
En utilisant ces principes, comment faire pour créer une liste de mots à partir de la chaine de caractères suivante : chaine="un,deux,trois,quatre,cinq" ?
Extraire des groupes aléatoires.
L'objectif est de créer une fonction groupe(taille,nom_csv)
qui prend pour argument un entier : taille correspondant à la taille des groupes voulus et une chaine de caractère nom_csv correspondant au nom du fichier csv qui renvoie la répartition des groupes à la bonne taille de manière aléatoire.
Le matériel nécessaire se compose d'un fichier csv téléchargeable ici
Chaque individu possède trois attribut Prénom, Nom, Race
Les individus sont des "peaux vertes" constitués d'orques et de gobelins.
Quelques aides à la réalisation de ce travail :
import csv
eleve=open("eleve.csv","r") #ouvre le fichier eleve.csv est le met en mémoire dans la variable eleve
reader=csv.reader(eleve) #transforme la variable eleve en un objet itérable
for row in reader:
print(row[1])
eleve.close() #referme le fichier
Prolongement possible :
On donne la liste suivante :
# Données sur la couleur des yeux
# marron = "m"
# bleu = "b"
# noisette = "n"
# verts = "v"
# gris = "g"
l=['m', 'n', 'g', 'm', 'b', 'b', 'g', 'm', 'v', 'm', 'b', 'n', 'm', 'n', 'v', 'm', 'm', 'b', 'm', 'm', 'm', 'm', 'b', 'm', 'm', 'm', 'm', 'm', 'm', 'm', 'm', 'm']
Quelle information pouvez vous extraire de cette liste? Comment organiser cette information?
Le dictionnaire , de type dict
en Python, est une structure de données permettant d’associer des valeurs à des clés.
C'est un type de conteneur
comme les list
et les tuple
mais ce n'est pas une séquence
. Au sens où les valeurs des tableaux ne sont pas indexés par des entiers.
Les clés peuvent être de type : str, entier, flottants, tuple ( à conditions que les tuples ne contiennent que des entiers, des flottants ou des n-uplets et pas des listes).
Les valeurs peuvent être de n'importe quel type.
A partir d’une clé, on peut alors accéder directement à la valeur qui lui est associée.
construire un objet dict en Python
Pour créer un dictionnaire, on écrit entre des accolades les couples séparés par deux points :
, chaque couple étant composé d'une clé et de la valeur correspondante.
En Python, on écrira :
{clé1:valeur1,clé2:valeur2,....}
dico={"yes":"oui", "no":"non","and":"et", "nsi":"dansletop2despé", "maths":"dansletop2desspé"}
jours={1:"lundi",2:"mardi",3:"mercredi",4:"jeudi",5:"vendredi",6:"samedi",7:"dimanche"}
Balzac={'pnom':'Honoré de Balzac','nais':1799,'mort':1850,'romans':['Les Chouans','La Peau de chagrin','Les Contes drolatiques','Eugénie Grandet','Le Père Goriot','Le Colonel Chabert','Le Lys dans la vallée','Illusions perdues','Ursule Mirouët','La Cousine Bette','Le Cousin Pons']}
Pour chaque question déterminer si la structure proposée est un dictionnaire en identifiant les clés , les valeurs et leur type.
{"prénoms" : ["Jaime", "lansi","aimé","hans","aignan"], "âge" : 16,"1":2019}
{[1,2,3]:"triplet",[x,y]:"couple"}
{(1,2,3):"triplet",(x,y):"couple"}
{(10, 'trèfle'): 10, (9, 'trèfle'): 9, (8, 'trèfle'): 8, (7, 'trèfle'): 7}
Pour ajouter une couple de clé,valeur il suffit d'écrire :
d[nouvelle_clé]=nouvelle_valeur
On donne le dictionnaire suivant qui donne les résultats de Bob :
res={'nsi' :18,'maths':17,'svt':14,'français':14,'lv1':8,'physique':12,'HG':11}
Ajouter la moyenne de 12 en lv2.
const_dico(cle,valeur)
qui renvoie le dictionnaire définie par les clés et les valeurs entrées en argument.
On donne des listes de certains joueurs de League Of Legend ainsi que leur classement et leur nombre de points :
pseudo=['Major Alexander','KBM Wiz', 'FNC MagiFelix','Avalanche','love camile','Nobody']
classement=[(12,1406),(1,1613),(4,1507),(9,1429),(16,1341),(11,1416)]
const_dico(cle,valeur)
sur les joueurs de LOL.Il existe divers procédés de construction d'un dictionnaire afin d'éviter d'ajouter les éléments un par un, en voila 2 exemples :
Comme avec les listes il est possible de construire des dictionnaire en compréhension.
Prenez le temps de lire et de comprendre et d'expliquer à l'écrit les lignes de script suivantes :
dico1={x:x**2 for x in range(1,5)}
jours='lundi','mardi','mercredi','jeudi','vendredi','samedi','dimanche'
dico={i+1:jours[i] for i in range(len(jours))}
Cryptographie
la fonction chr()
Pour cet exercice nous allons utiliser la fonction chr
de Python qui prend en argument un entier (codé en décimal) et qui renvoie le caractère ASCII associé.
Voici une table ASCII
Décimal Octal Hex Binaire Caractère ------- ----- --- -------- ------ 000 000 00 00000000 NUL (Null char.) 001 001 01 00000001 SOH (Start of Header) 002 002 02 00000010 STX (Start of Text) 003 003 03 00000011 ETX (End of Text) 004 004 04 00000100 EOT (End of Transmission) 005 005 05 00000101 ENQ (Enquiry) 006 006 06 00000110 ACK (Acknowledgment) 007 007 07 00000111 BEL (Bell) 008 010 08 00001000 BS (Backspace) 009 011 09 00001001 HT (Horizontal Tab) 010 012 0A 00001010 LF (Line Feed) 011 013 0B 00001011 VT (Vertical Tab) 012 014 0C 00001100 FF (Form Feed) 013 015 0D 00001101 CR (Carriage Return) 014 016 0E 00001110 SO (Shift Out) 015 017 0F 00001111 SI (Shift In) 016 020 10 00010000 DLE (Data Link Escape) 017 021 11 00010001 DC1 (XON)(Device Control 1) 018 022 12 00010010 DC2 (Device Control 2) 019 023 13 00010011 DC3 (XOFF)(Device Control 3) 020 024 14 00010100 DC4 (Device Control 4) 021 025 15 00010101 NAK (Negative Acknowledgement) 022 026 16 00010110 SYN (Synchronous Idle) 023 027 17 00010111 ETB (End of Trans. Block) 024 030 18 00011000 CAN (Cancel) 025 031 19 00011001 EM (End of Medium) 026 032 1A 00011010 SUB (Substitute) 027 033 1B 00011011 ESC (Escape) 028 034 1C 00011100 FS (File Separator) 029 035 1D 00011101 GS (Group Separator) 030 036 1E 00011110 RS (Request to Send)(Record Separator) 031 037 1F 00011111 US (Unit Separator) 032 040 20 00100000 SP (Space) 033 041 21 00100001 ! (exclamation mark) 034 042 22 00100010 " (double quote) 035 043 23 00100011 # (number sign) 036 044 24 00100100 $ (dollar sign) 037 045 25 00100101 % (percent) 038 046 26 00100110 & (ampersand) 039 047 27 00100111 ' (single quote) 040 050 28 00101000 ( (left opening parenthesis) 041 051 29 00101001 ) (right closing parenthesis) 042 052 2A 00101010 * (asterisk) 043 053 2B 00101011 + (plus) 044 054 2C 00101100 , (comma) 045 055 2D 00101101 - (minus or dash) 046 056 2E 00101110 . (dot) 047 057 2F 00101111 / (forward slash) 048 060 30 00110000 0 049 061 31 00110001 1 050 062 32 00110010 2 051 063 33 00110011 3 052 064 34 00110100 4 053 065 35 00110101 5 054 066 36 00110110 6 055 067 37 00110111 7 056 070 38 00111000 8 057 071 39 00111001 9 058 072 3A 00111010 : (colon) 059 073 3B 00111011 ; (semi-colon) 060 074 3C 00111100 < (less than sign) 061 075 3D 00111101 = (equal sign) 062 076 3E 00111110 > (greater than sign) 063 077 3F 00111111 ? (question mark) 064 100 40 01000000 @ (AT symbol) 065 101 41 01000001 A 066 102 42 01000010 B 067 103 43 01000011 C 068 104 44 01000100 D 069 105 45 01000101 E 070 106 46 01000110 F 071 107 47 01000111 G 072 110 48 01001000 H 073 111 49 01001001 I 074 112 4A 01001010 J 075 113 4B 01001011 K 076 114 4C 01001100 L 077 115 4D 01001101 M 078 116 4E 01001110 N 079 117 4F 01001111 O 080 120 50 01010000 P 081 121 51 01010001 Q 082 122 52 01010010 R 083 123 53 01010011 S 084 124 54 01010100 T 085 125 55 01010101 U 086 126 56 01010110 V 087 127 57 01010111 W 088 130 58 01011000 X 089 131 59 01011001 Y 090 132 5A 01011010 Z 091 133 5B 01011011 [ (left opening bracket) 092 134 5C 01011100 \ (back slash) 093 135 5D 01011101 ] (right closing bracket) 094 136 5E 01011110 ^ (caret cirumflex) 095 137 5F 01011111 _ (underscore) 096 140 60 01100000 ` 097 141 61 01100001 a 098 142 62 01100010 b 099 143 63 01100011 c 100 144 64 01100100 d 101 145 65 01100101 e 102 146 66 01100110 f 103 147 67 01100111 g 104 150 68 01101000 h 105 151 69 01101001 i 106 152 6A 01101010 j 107 153 6B 01101011 k 108 154 6C 01101100 l 109 155 6D 01101101 m 110 156 6E 01101110 n 111 157 6F 01101111 o 112 160 70 01110000 p 113 161 71 01110001 q 114 162 72 01110010 r 115 163 73 01110011 s 116 164 74 01110100 t 117 165 75 01110101 u 118 166 76 01110110 v 119 167 77 01110111 w 120 170 78 01111000 x 121 171 79 01111001 y 122 172 7A 01111010 z 123 173 7B 01111011 { (left opening brace) 124 174 7C 01111100 | (vertical bar) 125 175 7D 01111101 } (right closing brace) 126 176 7E 01111110 ~ (tilde) 127 177 7F 01111111 DEL (delete)
Le chiffrement de César
A chaque lettre de l'alphabet on associe un nombre de à 0 à 25. On ajoute à ce nombre un nombre choisi par exemple 7. Le reste de la division euclidienne du nombre obtenue par 26 correspond au chiffre qui codera la lettre initiale.
la lettre Y est associée à 24, on lui ajoute 7 on obtient 31. Le reste de la division euclidienne de 31 par 26 est 5. Ce qui donne E. Y est donc codé par E.
a%b
Une fonction de codage
d
et tester :
d['A']
d['D']
d['E']
codage(mot)
qui prend en argument un chaine de caractère écrit en lettre capitale et qui renvoie le mot codé par le chiffrement de César.
la fonction dict()
la fonction dict
permet la conversion d'une liste de listes à deux éléments en dictionnaire.
liste=[['a',1],['b',2],['c',3]]
d=dict(liste)
print(d)
Accéder aux valeurs associés à une clé
Pour accéder à la valeur d'une clé d'un dictionnaire d on écrit :
d[clé]
On donne le dictionnaire suivant :
Pour modifier une valeur d'une clé d'un dictionnaire d on écrit :
d[cle]=new_value
Modifier la couleur du pantalon de Bob dans ce dictionnaire :
pantalon_Bob={'tissu':'coton','taille':'40', 'couleur':'bleu'}
Pour connaitre la longueur d'un dictionnaire on utilise la fonction len
Déterminer le nombre d'éléments dans ce dictionnaire :
{0: 828, 1: 5418, 3: 469, 4: 306, 6: 833, 7: 7, 9: 3422, 2: 1690, 8: 7056, 5: 321, 18: 2333, 20: 850, 19: 798, 11: 7693, 17: 1730, 33: 782, 15: 3477, 32: 1443, 37: 475, 24: 287, 28: 1920, 42: 513, 14: 5040, 46: 1059, 25: 3464, 49: 1227, 21: 1813, 54: 2946, 41: 6034, 12: 4322, 43: 686, 51: 2917, 16: 6905, 53: 2028, 22: 2780, 10: 5907, 39: 4397, 67: 851, 71: 3434, 70: 3111, 13: 1341, 86: 18, 61: 3031, 29: 716, 79: 2302, 56: 4465, 72: 958, 66: 4054, 27: 495, 81: 4913, 82: 2831, 91: 377, 45: 1581, 73: 574, 88: 1910, 95: 4365, 93: 304, 90: 2093, 57: 2321, 38: 8675, 117: 4098, 102: 6831, 62: 256, 104: 1342, 77: 2893, 130: 2736, 97: 1041, 129: 646, 133: 20, 94: 3729, 44: 1212, 138: 4838, 84: 351, 144: 359, 123: 1448, 120: 5921, 121: 1069, 124: 668, 128: 1081, 131: 1197, 156: 189, 155: 859, 50: 1858, 69: 1725, 167: 246, 146: 3651, 35: 6752, 191: 1578, 34: 791, 194: 3051, 150: 1406, 184: 1364, 87: 5572, 175: 494, 36: 3235, 202: 5373, 192: 121, 98: 2694, 115: 5420, 75: 957, 105: 10, 85: 1551, 190: 136, 213: 235, 118: 5853, 127: 823, 188: 2109, 40: 7310, 136: 226, 110: 1287, 218: 279, 78: 1494, 76: 1841, 173: 8402, 199: 5806, 225: 3531, 180: 1438, 162: 2127, 109: 3003, 235: 5881, 114: 4217, 132: 3200, 206: 317, 176: 4538, 223: 1276, 119: 1600, 108: 659, 30: 922, 147: 199, 80: 1399, 169: 2468, 241: 60, 172: 557, 220: 4801, 134: 98, 219: 1146, 214: 2367, 205: 4218, 152: 525, 142: 3075, 245: 2401, 137: 51, 217: 1894, 242: 7900, 290: 5461, 141: 1247, 250: 695, 273: 1824, 296: 1800, 170: 2619, 286: 9, 247: 4060, 256: 353, 251: 1700, 259: 945, 221: 829, 203: 2027, 262: 1540, 149: 700, 293: 608, 107: 5829, 258: 7850, 271: 1207, 163: 1429, 92: 147, 212: 2910, 186: 5566, 151: 1003, 313: 4841, 89: 2728, 154: 6376, 348: 1191, 23: 2212, 335: 430, 356: 43, 358: 590, 230: 6334, 211: 898, 277: 452, 161: 841, 168: 129, 125: 1601, 243: 2820, 311: 2792, 249: 1466, 272: 4055, 330: 1299, 159: 576, 157: 2930, 386: 2810, 389: 4815, 379: 3097, 377: 847, 295: 862, 285: 1375, 236: 1345, 404: 3610, 216: 8192, 274: 413, 74: 2259, 349: 1875, 328: 998, 153: 65, 200: 530, 321: 1878, 164: 589, 395: 1132, 197: 1172, 68: 6773, 415: 422, 252: 5913, 158: 147, 196: 1787, 283: 1193, 351: 2880, 360: 1869, 276: 217, 233: 59, 337: 6050, 437: 2383, 418: 3354, 122: 3835, 160: 458, 446: 355, 255: 13, 231: 368, 408: 1725, 179: 5701, 346: 1454, 299: 3501, 65: 14, 442: 56, 350: 919, 479: 960, 470: 140, 116: 2912, 399: 2372, 315: 22, 398: 315, 246: 1208, 312: 4046, 339: 2770, 291: 6790, 427: 3705, 353: 44, 443: 4637, 368: 3565, 195: 3247, 491: 19, 198: 1425, 47: 1558, 177: 3139, 501: 5441, 310: 4506, 378: 1731, 322: 1807, 503: 5970, 344: 676, 317: 2853, 227: 52, 450: 2061, 465: 331, 181: 6971, 278: 1249, 325: 3146, 59: 1077, 508: 2119, 380: 1126, 60: 4877, 302: 265, 280: 195, 561: 3838, 371: 5452, 63: 4795, 459: 3125, 502: 150, 334: 545, 429: 1520, 536: 2219, 439: 212, 498: 300, 307: 2673, 309: 5929, 455: 1132, 208: 1018, 381: 2981, 563: 3124, 239: 841, 565: 6800, 268: 1489, 428: 3895, 373: 337, 581: 14, 528: 6910, 417: 827, 407: 200, 55: 4767, 435: 1462, 559: 184, 332: 431, 111: 254, 473: 3065, 432: 991, 338: 2581, 366: 295, 412: 786, 275: 690, 471: 2700, 588: 458, 165: 6977, 444: 2165, 265: 3861, 267: 364, 387: 575, 289: 3761, 363: 3604, 631: 2228, 591: 575, 620: 5228, 621: 307, 269: 1864, 341: 1006, 618: 960, 525: 1713, 320: 1089, 523: 1083, 485: 639, 558: 6136, 568: 3619, 468: 101, 361: 285, 319: 5785, 31: 7022, 282: 1295, 303: 139, 680: 2114, 556: 3681, 477: 119, 240: 3049, 511: 2677, 656: 6289, 643: 2507, 645: 1882, 667: 1236, 647: 3625, 560: 3871, 410: 3459, 100: 3950, 140: 8017, 318: 2918, 403: 1763, 608: 410, 687: 63, 719: 2760, 314: 979, 646: 161, 694: 1456, 326: 2761, 355: 1304, 597: 777, 396: 284, 718: 3212, 484: 1335, 478: 493, 281: 76, 518: 2971, 670: 859, 632: 677, 423: 2287, 745: 5276, 316: 3646, 106: 4412, 304: 1449, 182: 553, 547: 2914, 279: 447, 166: 1669, 411: 1129, 753: 3967, 658: 226, 391: 1141, 424: 29, 392: 3628, 514: 6545, 481: 486, 737: 181, 507: 433, 516: 5444, 720: 41, 204: 186, 531: 98, 426: 189, 524: 3908, 611: 4016, 774: 5919, 622: 4813, 769: 5808, 637: 5957, 571: 1045, 791: 788, 566: 737, 430: 2557, 749: 1253, 657: 2336, 689: 61, 400: 1408, 624: 9285, 832: 588, 449: 708, 590: 848, 210: 1130, 665: 4995, 287: 731, 284: 5399, 447: 97, 448: 4797, 843: 4778, 533: 452, 145: 1992, 472: 3485, 614: 212, 822: 1169, 603: 4481, 723: 1794, 780: 2045, 773: 661, 551: 450, 872: 179, 228: 6149, 451: 892, 445: 1125, 113: 2447, 636: 5019, 148: 552, 340: 5795, 846: 244, 684: 2426, 372: 6215, 606: 1004, 727: 178, 685: 1085, 655: 1234, 650: 1556, 222: 383, 300: 534, 847: 1460, 758: 1411, 609: 409, 305: 1953, 425: 2715, 785: 5109, 733: 3527, 781: 5734, 336: 303, 628: 656, 669: 849, 264: 1011, 331: 2704, 369: 5227, 913: 1835, 779: 6332, 615: 1654, 416: 3904, 376: 2256, 610: 5849, 849: 4855, 555: 2736, 486: 2013, 537: 5674, 850: 4877, 58: 4298, 288: 5396, 83: 901, 431: 3213, 848: 6531, 766: 2222, 596: 1598, 800: 8425, 747: 7344, 385: 350, 827: 3079, 864: 862, 539: 2857, 583: 799, 261: 3152, 742: 115, 802: 21, 343: 130, 948: 1082, 916: 5124, 635: 978, 569: 6377, 374: 1055, 886: 1419, 487: 3871, 96: 586, 594: 1073, 712: 409, 760: 1038, 909: 516, 496: 6013, 587: 2100, 814: 3705, 257: 8181, 406: 2, 884: 1345, 263: 6946, 347: 3017, 993: 1159, 873: 2511, 925: 6284, 474: 518, 688: 3993, 183: 1634, 861: 4196, 686: 1557, 638: 241, 938: 5471, 734: 1614, 623: 6549, 187: 588, 710: 2427, 868: 238, 193: 3150, 494: 1518, 541: 1937, 829: 548, 1014: 3722, 601: 468, 48: 1250, 859: 2353, 722: 6857, 292: 7120, 857: 1502, 879: 7934, 682: 1053, 761: 8128, 306: 919, 324: 816, 714: 356, 1055: 1131, 860: 732, 706: 95, 934: 2231, 936: 4976, 466: 8474, 882: 1704, 1028: 848, 896: 1088, 1047: 1583, 1029: 200, 892: 5649, 840: 3941, 813: 3022, 1021: 5416, 1132: 4370, 812: 1238, 772: 7558, 728: 736, 906: 4931, 958: 836, 763: 4550, 730: 1046, 866: 6094, 461: 2717, 765: 1891, 837: 8303, 602: 986, 612: 12, 1048: 595, 1131: 1398, 935: 714, 1040: 4358, 795: 3308, 1054: 567, 592: 36, 1032: 1628, 467: 1296, 1128: 6670, 244: 994, 460: 816, 613: 3628, 672: 4467, 545: 1137, 375: 3129, 237: 500, 697: 1357, 1164: 549, 1186: 3208, 933: 1115, 991: 5871, 1185: 510, 735: 2443, 475: 988, 1170: 2155, 654: 419, 957: 1644, 1166: 3676, 842: 4582, 895: 448, 977: 930, 573: 321, 1202: 3980, 804: 1311, 715: 2665, 1210: 2372, 865: 1116, 1041: 5568, 607: 3277, 1015: 1607, 593: 1604, 500: 1210, 787: 2793, 457: 494, 863: 2726, 1037: 4781, 1147: 1728, 914: 5098, 740: 932, 1086: 1084, 953: 1620, 651: 1975, 982: 5818, 1201: 3495, 1233: 1178, 1220: 340, 1173: 2567, 1238: 1721, 548: 1526, 1113: 4881, 997: 2836, 382: 2116, 580: 5761, 1153: 1089, 975: 726, 786: 6095, 1245: 1374, 1229: 1024, 452: 2538, 966: 785, 1196: 754, 988: 4216, 738: 9597, 394: 3521, 816: 1000, 794: 156, 1294: 426, 342: 683, 1083: 943, 1103: 1747, 900: 982, 419: 5363, 1283: 3444, 454: 246, 673: 2006, 1311: 5122, 1109: 1370, 639: 1925, 898: 7777, 1114: 29, 784: 7545, 600: 9305, 489: 4913, 595: 5165, 748: 495, 871: 4342, 666: 1556, 178: 4496, 1003: 825, 488: 4880, 483: 490, 578: 1019, 1056: 2565, 662: 1621, 869: 840, 640: 4483, 538: 7214, 762: 1141, 668: 572, 1190: 854, 436: 426, 506: 1426, 456: 959, 1237: 4681, 1221: 2533, 732: 1022, 778: 5617, 1124: 390, 572: 1328, 1230: 460, 1043: 7399, 1079: 5396, 1343: 2650, 891: 3381, 999: 5095, 1180: 5927, 1378: 658, 209: 738, 1365: 5180, 789: 3002, 1049: 2563, 1209: 1938, 1118: 1480, 493: 4115, 390: 2324, 1182: 2935, 1266: 1368, 1059: 3031, 504: 4982, 659: 884, 1305: 132, 589: 751, 693: 967, 1308: 3179, 1277: 479, 1303: 8239, 836: 1301, 705: 1293, 1454: 6264, 1078: 6146, 1058: 793, 1367: 5360, 907: 203, 824: 3433, 1023: 2121, 889: 1590, 405: 2979, 834: 1210, 1392: 287, 1256: 324, 605: 1168, 1331: 2584, 1157: 989, 1243: 808, 1080: 211, 1208: 2735, 626: 1003, 112: 198, 1082: 887, 630: 23, 1172: 1038, 1119: 1968, 1450: 3017, 619: 2606, 956: 542, 422: 672, 1354: 3380, 308: 2585, 890: 2885, 1212: 4356, 1223: 2336, 1495: 7008, 1460: 4387, 856: 1193, 1310: 612, 1370: 8566, 420: 2927, 696: 879, 1158: 2150, 796: 1398, 599: 2151, 1487: 1599, 553: 2219, 1265: 1750, 751: 448, 918: 7477, 1406: 571, 1004: 202, 1292: 2115, 579: 1578, 1542: 273, 1195: 738, 1414: 1528, 1339: 2902, 1405: 874, 1217: 2877, 1150: 88, 1456: 605, 1407: 408, 1273: 1427, 1271: 1555, 1384: 4729, 1001: 5385, 1514: 1667, 207: 553, 1330: 1565, 297: 5319, 1005: 6826, 549: 157, 1240: 7065, 954: 1, 1138: 30, 1154: 4384, 711: 6115, 1216: 2723, 266: 4452, 1332: 7902, 998: 308, 1017: 804, 1445: 5069, 969: 1629, 1325: 2713, 1228: 919, 1573: 2312, 359: 4113, 625: 8210, 683: 1785, 1471: 4669, 1129: 4992, 515: 3295, 1517: 252, 1546: 3229, 627: 160, 1532: 1323, 939: 395, 1453: 256, 1108: 6006, 905: 1140, 135: 2800, 770: 2166, 1249: 67, 1654: 108, 1477: 7989, 831: 3577, 1313: 7814, 535: 174, 1492: 2535, 1655: 6801, 357: 1712, 867: 6545, 893: 8613, 880: 1332, 922: 5946, 919: 1465, 854: 5702, 1466: 1926, 1522: 6395, 1567: 6156, 1409: 1165, 987: 4606, 1538: 144, 248: 2726, 708: 1180, 1174: 5614, 1165: 3592, 1171: 1967, 298: 3364, 1440: 912, 1324: 539, 1465: 584, 756: 723, 253: 925, 234: 8097, 1319: 321, 1607: 509, 1022: 5602, 799: 471, 64: 4875, 1106: 2902, 1496: 1315, 1710: 4569, 1244: 3591, 1478: 1019, 1267: 1378, 1419: 1480, 527: 3437, 1581: 4435, 1300: 3987, 985: 3552, 858: 1228, 716: 3819, 1031: 2007, 1722: 935, 139: 1514, 126: 1058, 1659: 5166, 1112: 415, 790: 2594, 1585: 1081, 1413: 1025, 543: 3240, 1081: 5720, 413: 400, 1754: 271, 1735: 3248, 736: 2022, 1012: 4787, 1372: 1880, 1582: 1097, 885: 4166, 660: 3669, 1599: 2746, 1771: 3927, 1241: 6876, 1747: 899, 1473: 1547, 1668: 2842, 1746: 1294, 876: 1230, 1278: 1353, 1524: 135, 1274: 4083, 495: 317, 771: 3534, 768: 3714, 1500: 1357, 567: 2337, 928: 6376, 1642: 212, 739: 190, 1575: 2684, 433: 5376, 1038: 636, 1544: 672, 1687: 2153, 853: 2268, 1411: 6702, 513: 6703, 1678: 1791, 1285: 1671, 1062: 968, 810: 6585, 1326: 1271, 1501: 5209, 1390: 3583, 1369: 781, 1034: 1002, 826: 924, 1341: 1824, 224: 801, 1006: 6285, 755: 915, 1550: 9323, 1511: 1033, 1234: 5045, 776: 5510, 1870: 6016, 1670: 2791, 1650: 1329, 1774: 1113, 1493: 3798, 700: 287, 1203: 2759, 1362: 2127, 1676: 1693, 421: 1065, 937: 1594, 1091: 3348, 1355: 1846, 1543: 2841, 497: 5145, 1646: 5458, 1262: 6498, 797: 1891, 1057: 2303, 633: 1963, 1290: 965, 333: 583, 1206: 3831, 1299: 4701, 1070: 4256, 1904: 821, 1239: 3741, 1745: 5524, 820: 3126, 1638: 2763, 1692: 5224, 1099: 991, 492: 4707, 972: 4530, 517: 1998, 1869: 2746, 1200: 1303, 1060: 1946, 1211: 579, 1408: 1926, 1443: 1929, 1321: 6971, 1874: 896, 1876: 3487, 1251: 658, 1178: 5461, 1671: 1179, 1064: 5307, 923: 731, 1505: 1871, 851: 7298, 1664: 4159, 1399: 2820, 1509: 1966, 731: 6597, 927: 1523, 1613: 955, 1912: 3641, 384: 2743, 327: 232, 393: 612, 1878: 1776, 1438: 2795, 1910: 2978, 652: 5611, 1289: 521, 1400: 1275, 1197: 5384, 811: 505, 1845: 1433, 1623: 113, 1377: 2501, 1608: 1743, 1990: 206, 819: 2164, 616: 2694, 1998: 2213, 801: 6831, 229: 1326, 1587: 580, 1757: 4721, 910: 2598, 1092: 8119, 546: 1673, 1348: 1147, 707: 291, 1177: 2976, 2018: 598, 806: 1955, 1988: 1757, 1911: 577, 1120: 6573, 1856: 4330, 564: 3737, 1997: 2136, 1898: 2046, 1619: 5445, 809: 8067, 1008: 4920, 2011: 697, 904: 4122, 562: 695, 1900: 191, 1560: 1524, 1592: 1893, 1862: 3969, 1072: 2955, 1568: 2961, 981: 162, 1402: 1524, 1840: 2628, 2103: 4718, 509: 1249, 1725: 884, 1033: 1590, 1067: 2833, 1063: 5429, 1916: 136, 2073: 3030, 1605: 639, 1415: 2856, 1349: 3091, 1551: 1853, 1999: 2449, 1634: 1769, 1272: 981, 1717: 1209, 1398: 4450, 1516: 385, 1748: 4115, 641: 519, 1387: 2611, 1773: 4714, 649: 357, 1090: 336, 1315: 1567, 1957: 1733, 1418: 2133, 52: 1346, 1410: 1430, 1785: 4352, 1026: 7471, 1281: 706, 1615: 958, 962: 7072, 1432: 582, 949: 342, 1872: 1139, 1877: 1308, 921: 7031, 1688: 1553, 1535: 800, 1984: 2756, 2099: 2470, 833: 3095, 2155: 303, 1820: 7234, 557: 283, 1609: 5682, 1917: 5984, 1991: 668, 1020: 2067, 1449: 4201, 1323: 2017, 352: 1264, 2069: 1299, 2210: 394, 1395: 5826, 1497: 1384, 1030: 1218, 943: 1415, 1356: 6020, 1469: 2672, 699: 2850, 1135: 1849, 1948: 607, 1864: 2094, 2198: 189, 1657: 2183, 1525: 221, 852: 3499, 1792: 2235, 185: 1801, 2164: 375, 1145: 4185, 1175: 3297, 1475: 249, 2042: 4145, 2178: 6521, 1533: 174, 1895: 2957, 1136: 1718, 2129: 123, 2200: 8967, 1503: 1403, 2171: 6276, 2124: 6616, 1429: 3238, 825: 975, 1127: 1692, 1125: 3885, 648: 277, 2251: 1621, 1765: 3645, 1297: 855, 1699: 3420, 2161: 5839, 1740: 2536, 1724: 1051, 1768: 1576, 992: 715, 1660: 1644, 2195: 3044, 945: 854, 2134: 4333, 1561: 5455, 729: 180, 971: 1505, 1194: 1261, 704: 236, 964: 1614, 1447: 1438, 388: 1812, 1576: 1603, 1009: 2684, 1346: 3637, 629: 419, 2149: 1694, 1403: 3574, 1830: 6069, 1979: 4861, 1000: 2581, 1137: 1089, 841: 3035, 1886: 495, 1061: 2126, 2338: 1042, 2083: 1984, 1264: 2164, 1156: 2282, 1353: 699, 2088: 1605, 1954: 1477, 1865: 5193, 1360: 1382, 1476: 5121, 828: 4715, 1282: 1063, 1797: 1952, 2252: 82, 2187: 5687, 2344: 4658, 1430: 311, 1276: 2706, 1288: 1346, 2283: 799, 1446: 10, 2066: 4009, 2355: 928, 2228: 3154, 2012: 2216, 1024: 439, 2218: 4822, 903: 1872, 1766: 4345, 1996: 234, 967: 6023, 642: 1823, 1149: 2370, 2123: 6362, 1376: 1081, 1520: 4385, 835: 241, 1236: 6554, 1821: 4446, 2291: 2934, 870: 4695, 2028: 1878, 1696: 1531, 1778: 2942, 1235: 685, 1549: 2989, 2021: 5105, 1050: 6388, 951: 1850, 1656: 1731, 2353: 961, 1161: 2732, 1096: 1919, 1944: 5177, 1967: 576, 1806: 3935, 1371: 2079, 757: 2587, 2343: 8045, 984: 3600, 1489: 227, 2183: 3485, 894: 291, 1152: 980, 2278: 2906, 2109: 1290, 698: 2011, 1302: 129, 2078: 2081, 883: 5417, 1744: 3533, 2175: 1648, 1644: 7905, 2280: 1488, 2025: 2760, 1923: 1390, 1763: 2424, 897: 4471, 2085: 2944, 2475: 491, 703: 820, 1749: 4507, 1826: 1513, 675: 6101, 1252: 1334, 1287: 1978, 1219: 1821, 1269: 1143, 1726: 6758, 529: 1747, 1554: 4434, 2391: 2303, 1499: 3629, 767: 6032, 1846: 2119, 1320: 1536, 254: 3368, 2434: 0, 1340: 915, 2385: 156, 1751: 3852, 1100: 244, 695: 2697, 947: 1801, 2080: 431, 1598: 4553, 1946: 1851, 1969: 3544, 2279: 915, 1117: 179, 2115: 2221, 1159: 2357, 1932: 1646, 2333: 4614, 1338: 2059, 750: 8332, 2060: 5393, 961: 2049, 1077: 3550, 929: 3693, 1169: 1725, 2248: 1055, 2193: 4592, 1508: 3267, 978: 4028, 1105: 853, 2324: 1126, 505: 2056, 2337: 4616, 2114: 5015, 989: 4013, 2135: 6752, 1389: 2604, 2416: 223, 2101: 5894, 994: 138, 1075: 4311, 1758: 1078, 1199: 677, 2055: 8035, 1974: 5500, 1658: 2269, 2476: 7803, 1595: 3413, 1227: 5595, 2508: 375, 746: 2830, 1140: 4048, 713: 977, 1563: 1194, 1192: 605, 585: 1924, 1651: 1284, 1622: 2558, 2216: 2691, 2500: 4684, 2122: 83, 1928: 1353, 1603: 600, 2045: 4433, 2144: 2569, 2464: 1588, 2407: 3430, 807: 2998, 2499: 2604, 2050: 7737, 2409: 693, 2381: 2133, 2463: 7, 1444: 791, 1189: 3760, 690: 435, 1046: 339, 952: 793, 499: 2608, 878: 6117, 808: 4591, 2535: 1837, 839: 9027, 1213: 493, 1570: 782, 2249: 3532, 2441: 3926, 2469: 992, 1824: 2052, 584: 2580, 1863: 1118, 1337: 3055, 438: 1806, 2356: 1546, 2690: 4090, 2533: 293, 911: 2598, 540: 11, 2422: 1832, 1523: 434, 2173: 153, 2225: 2324, 1537: 8601, 2153: 533, 2643: 2032, 1143: 524, 817: 66, 1673: 2443, 1809: 4995, 2093: 854, 899: 1229, 1530: 2375, 2094: 2665, 1085: 1671, 2665: 924, 2166: 1613, 2306: 139, 1781: 2146, 2148: 5996, 2448: 1859, 877: 1156, 1680: 2415, 1926: 2235, 1486: 2584, 2421: 1251, 2156: 4157, 2734: 117, 1553: 1368, 2328: 545, 2719: 1708, 1720: 1217, 2202: 1709, 2361: 2992, 1467: 5778, 2366: 1381, 1629: 1695, 2257: 3008, 2345: 3064, 2041: 4031, 1541: 1977, 1116: 181, 1559: 6572, 1939: 3807, 2336: 3472, 2523: 1704, 931: 1726, 1296: 9028, 1345: 905, 1632: 948, 1071: 2471, 1253: 3101, 2629: 6757, 1958: 2111, 2150: 6345, 1636: 2240, 1484: 707, 2810: 1798, 875: 3775, 2127: 1665, 2608: 4749, 1776: 618, 414: 734, 1935: 2393, 2072: 4328, 1750: 1441, 490: 3294, 2405: 2441, 2644: 1749, 2480: 8279, 1218: 2331, 1857: 1623, 1115: 1911, 2737: 7229, 2745: 5040, 2426: 1327, 1738: 4112, 1427: 1394, 2418: 1693, 2752: 2148, 1891: 7418, 1908: 1722, 2700: 5386, 1247: 1831, 2843: 1151, 2284: 1063, 1834: 1063, 1383: 2264, 1940: 1434, 1483: 1266, 2728: 1220, 2649: 594, 1051: 509, 2261: 1342, 759: 1540, 2484: 1032, 2817: 1789, 2163: 1852, 702: 1465, 2325: 1679, 2269: 7216, 2259: 6685, 2432: 3644, 2851: 1950, 1433: 2449, 2596: 4625, 1490: 1771, 2478: 377, 1142: 1280, 968: 2793, 2329: 3615, 1727: 2371, 1684: 3028, 1110: 2345, 2534: 7433, 2655: 1906, 2539: 4782, 1184: 1362, 1852: 6218, 2846: 265, 2137: 1027, 1097: 1914, 586: 2536, 2004: 2792, 2453: 2476, 2511: 1116, 2820: 1600, 1894: 2470, 2889: 2516, 2832: 1665, 2008: 1069, 1614: 239, 604: 2914, 2864: 2867, 2668: 1864, 1255: 7765, 189: 1600, 2233: 2821, 2682: 4973, 2462: 9051, 1813: 3222, 2730: 2268, 2341: 1923, 2458: 562, 2051: 812, 2925: 3450, 874: 589, 2854: 21, 1679: 658, 1179: 5652, 2165: 3473, 2829: 3404, 2873: 536, 2937: 3518, 2936: 398, 2908: 2543, 2517: 1564, 1094: 1171, 2686: 5323, 1428: 639, 1439: 3068, 2375: 833, 932: 786, 2423: 2778, 2383: 1664, 2560: 7067, 681: 1349, 2822: 7866, 1421: 2538, 1933: 762, 1873: 682, 1951: 2321, 2125: 4292, 2406: 6039, 2894: 2749, 2411: 673, 1528: 484, 1011: 187, 2860: 2667, 2743: 9095, 1506: 7693, 1672: 5013, 2142: 523, 582: 1491, 1868: 6422, 2086: 6359, 1929: 809, 752: 4063, 1811: 1124, 238: 3473, 2664: 4723, 2975: 456, 2536: 3919, 1422: 5241, 844: 1488, 1955: 4333, 881: 70, 1295: 868, 1007: 1919, 2993: 1482, 955: 98, 709: 2995, 2118: 641, 1753: 1704, 2485: 3449, 1361: 1284, 2692: 1167, 1602: 1183, 2377: 3407, 1042: 3070, 1804: 574, 1985: 4463, 1871: 2157, 1801: 529, 1045: 1632, 2067: 172, 2436: 2522, 1485: 3046, 2488: 320, 2912: 8908, 2987: 42, 1304: 168, 2177: 103, 1814: 646, 2582: 2789, 2875: 541, 2540: 928, 2779: 5818, 2840: 9450, 2553: 492, 2903: 3047, 2530: 1701, 2794: 367, 2749: 6482, 1263: 6246, 1661: 2835, 1903: 660, 2784: 60, 2871: 2011, 2550: 3716, 2816: 3111, 1947: 47, 1351: 2358, 3129: 1374, 2318: 4037, 1139: 2236, 1719: 1103, 764: 11, 2474: 2320, 2998: 1160, 2767: 5680, 1831: 4426, 2438: 5721, 2087: 7272, 1502: 1023, 2813: 5439, 2541: 3076, 1539: 1334, 2979: 1671, 1394: 839, 3146: 1278, 2529: 583, 2934: 371, 3069: 3188, 2524: 295, 2543: 2225, 1566: 1111, 986: 5528, 2121: 2757, 2141: 3072, 2017: 1908, 2346: 2537, 2683: 3454, 2648: 79, 963: 42, 2902: 7737, 2926: 1100, 171: 4849, 2701: 2838, 2110: 3136, 2461: 3160, 1084: 7240, 1130: 5375, 2935: 1351, 2855: 5325, 1961: 7237, 3174: 633, 1364: 5147, 364: 445, 1925: 5650, 1479: 2557, 2569: 776, 2196: 7029, 1920: 401, 2413: 8682, 2939: 1562, 1191: 2644, 2693: 1310, 1301: 4797, 1436: 2785, 1246: 1495, 1669: 2608, 3106: 3451, 2513: 1584, 3215: 2249, 2986: 2677, 2092: 5649, 2556: 2831, 103: 5615, 576: 4275, 1829: 2070, 3044: 6287, 383: 5423, 1798: 4685, 3030: 7744, 1126: 139, 1557: 3294, 3190: 1030, 2152: 243, 1962: 1471, 3135: 3206, 2918: 3028, 2977: 2810, 1604: 2932, 2349: 7254, 2044: 195, 1342: 1564, 2520: 2761, 2312: 1422, 1850: 1073, 1685: 6274, 2836: 2589, 2772: 1251, 3093: 2600, 1193: 2965, 3097: 6044, 2038: 8651, 2496: 3041, 3318: 1555, 3322: 5494, 3255: 2702, 3041: 507, 803: 1411, 1380: 5033, 915: 2039, 2424: 4593, 1706: 1874, 783: 1239, 1837: 304, 1767: 2301, 2943: 272, 2867: 4195, 2214: 1350, 2079: 5861, 2988: 2059, 2724: 1945, 1102: 4440, 3160: 3340, 1937: 2009, 1463: 7621, 510: 3355, 2111: 757, 3314: 4609, 2097: 2170, 2720: 4844, 3257: 3811, 2626: 1349, 2082: 3602, 2090: 2238, 3151: 3158, 1836: 283, 3247: 1095, 3216: 1241, 519: 1681, 3252: 2111, 726: 3526, 3430: 793, 1902: 367, 2850: 1815, 3143: 865, 2068: 806, 2542: 551, 3158: 4209, 1434: 405, 370: 1729, 1601: 4574, 818: 926, 2869: 1963, 2604: 4978, 401: 522, 2276: 3092, 3212: 3602, 1121: 3371, 2651: 1084, 2792: 8856, 2477: 5697, 1633: 927, 2009: 2344, 2132: 1564, 912: 3489, 2750: 1373, 2983: 4351, 2806: 4213, 3263: 1299, 2714: 1292, 3202: 3151, 1630: 2980, 1529: 4481, 1327: 1703, 2167: 2723, 3025: 1249, 2268: 5764, 1701: 2888, 2647: 7455, 2180: 2045, 1519: 979, 3300: 1868, 2372: 3032, 2656: 5260, 3021: 3619, 3062: 439, 1844: 3374, 1782: 1790, 2751: 1204, 3070: 4315, 2417: 3484, 754: 2159, 2777: 1847, 1368: 2577, 2778: 4649, 1843: 61, 2574: 2160, 2223: 957, 1293: 3444, 1635: 8223, 3034: 4042, 367: 1517, 1715: 7603, 1631: 1886, 2274: 5113, 1148: 3565, 1915: 1383, 2250: 3889, 1569: 2755, 3340: 570, 691: 36, 930: 4973, 2697: 4498, 434: 4591, 1896: 6770, 3123: 3218, 345: 4902, 1892: 1019, 1918: 5560, 2980: 1235, 775: 1005, 2256: 7128, 1205: 1033, 3342: 3542, 2661: 2525, 3344: 3140, 1010: 503, 530: 1047, 3061: 1017, 1494: 837, 3405: 4193, 3612: 2973, 26: 4653, 2785: 3546, 3138: 2162, 941: 4427, 3486: 2430, 2075: 1847, 2844: 390, 3362: 669, 3321: 1313, 3402: 2803, 1385: 5704, 2386: 1597, 2798: 2913, 3491: 7825, 3126: 3865, 2775: 2594, 2621: 1571, 1702: 1241, 2254: 2334, 1617: 3031, 3284: 2009, 1590: 146, 3338: 2318, 1698: 4662, 1334: 3826, 2761: 168, 2931: 5887, 3295: 4461, 3464: 8863, 1799: 1504, 1359: 1155, 2570: 2719, 2780: 3533, 2145: 395, 3655: 5096, 2445: 2375, 2273: 6444, 2016: 6859, 3104: 5139, 2435: 3959, 3099: 424, 3634: 3033, 2219: 3831, 3176: 2645, 3623: 3122, 2260: 2339, 1637: 3710, 1848: 735, 924: 6048, 2824: 2197, 1231: 1697, 788: 972, 2307: 6811, 3325: 476, 2637: 700, 3622: 2440, 3373: 3438, 3665: 2632, 3438: 1170, 2096: 4388, 3651: 4581, 744: 530, 2442: 1544, 2992: 3089, 2715: 3062, 1417: 2134, 1606: 4706, 1647: 641, 3079: 458, 3616: 4523, 3415: 556, 3142: 3063, 3431: 4398, 1662: 1413, 2229: 521, 3649: 2786, 1547: 3612, 3343: 9741, 2740: 3128, 1677: 3389, 2876: 2541, 2455: 59, 3735: 6985, 2599: 2790, 3193: 556, 1442: 5555, 3299: 2602, 1540: 2025, 3111: 668, 3049: 5414, 2354: 5380, 3082: 807, 2961: 2139, 2313: 1564, 2591: 19, 2515: 3190, 2861: 98, 2742: 3738, 2710: 375, 201: 2341, 1694: 5312, 3287: 7189, 2947: 1993, 3192: 3569, 3411: 3258, 3618: 1848, 1817: 3586, 2287: 958, 960: 1979, 3770: 5097, 3408: 315, 3240: 2654, 2849: 3239, 995: 4690, 970: 5730, 2804: 3699, 2583: 3368, 3728: 7370, 3265: 405, 3549: 6428, 1578: 1237, 3335: 261, 3766: 1250, 2472: 4828, 2197: 6677, 3410: 3376, 3463: 667, 3206: 1491, 2841: 3045, 2258: 1871, 2828: 8056, 2997: 1521, 902: 3316, 3016: 846, 3520: 4677, 1728: 1299, 1498: 3037, 3729: 1267, 3244: 3217, 3869: 1928, 2965: 2618, 3826: 3208, 3882: 3644, 3639: 5130, 3276: 2980, 1795: 4655, 2754: 683, 2491: 3651, 3613: 2456, 3736: 172, 3110: 939, 3010: 1191, 2932: 3698, 3119: 239, 3172: 459, 3189: 867, 1611: 2882, 3588: 5317, 3118: 4628, 1950: 875, 1628: 2476, 1756: 3871, 1491: 1922, 3328: 1978, 3339: 6040, 1089: 4671, 3509: 2088, 3162: 5353, 3793: 4478, 2531: 2821, 3027: 3245, 3136: 2826, 3026: 4988, 3341: 841, 678: 4712, 3935: 799, 2593: 2033, 1068: 887, 3574: 3783, 1994: 1962, 3786: 2009, 2721: 1577, 1992: 1109, 3632: 5529, 2319: 1540, 3643: 5282, 3147: 3172, 2863: 2135, 2738: 4097, 3414: 5247, 1548: 4948, 3687: 4473, 2689: 3343, 2945: 1575, 1052: 6174, 2967: 4147, 3896: 2359, 2952: 1794, 2429: 3789, 2827: 2641, 3963: 3099, 409: 377, 2026: 5330, 2786: 425, 3658: 3757, 3939: 3415, 2736: 1135, 1931: 1931, 3769: 3453, 2564: 2720, 1347: 2678, 1705: 3009, 2882: 2584, 3166: 2797, 1653: 3185, 3268: 2637, 3739: 4775, 1386: 300, 3760: 1621, 1802: 588, 1790: 2232, 2580: 1499, 1989: 754, 2805: 585, 2748: 1322, 3011: 1498, 1404: 5330, 3700: 2252, 793: 1176, 2602: 441, 1775: 770, 2537: 2562, 2388: 7285, 1982: 394, 3211: 6644, 3101: 831, 2687: 4694, 1336: 411, 3952: 2622, 2492: 3049, 3737: 1610, 532: 2091, 1919: 2727, 3722: 5852, 2286: 571, 3493: 6472, 2981: 7132, 1718: 4874, 3445: 1562, 3336: 1164, 2774: 918, 2357: 3956, 1562: 6994, 2609: 3777, 3000: 2417, 1431: 2204, 1888: 4892, 3532: 7044, 3761: 117, 3849: 3600, 2054: 1858, 3525: 4519, 3554: 456, 3999: 3113, 2590: 1543, 3800: 1489, 2821: 1898, 3435: 2164, 3987: 2349, 3759: 1598, 2858: 4740, 2758: 7208, 3173: 1515, 2857: 3335, 3046: 4260, 3452: 1718, 3966: 2237, 3807: 1029, 3096: 911, 2373: 2960, 260: 2116, 3863: 4140, 1039: 713, 2212: 3838, 2598: 4426, 3327: 210, 1375: 4015, 1333: 1552, 3512: 8323, 3260: 2444, 2247: 3813, 3688: 694, 4082: 1119, 3131: 1461, 3163: 855, 3043: 1009, 679: 1097, 2359: 4464, 2565: 147, 1867: 3723, 2074: 1997, 3028: 39, 815: 618, 3495: 2082, 2657: 5876, 2392: 1160, 2046: 2726, 3380: 5938, 4032: 7116, 4231: 1931, 3745: 767, 3565: 576, 2791: 4748, 3128: 3439, 4069: 4365, 2032: 3614, 1626: 2177, 1111: 807, 1643: 2566, 3381: 1293, 3217: 2788, 2862: 3194, 2895: 6097, 1545: 2399, 3023: 4165, 1307: 6651, 2956: 420, 2703: 2569, 980: 1813, 4245: 2427, 1224: 1165, 1312: 2287, 663: 3094, 3425: 3075, 3798: 2724, 2104: 1303, 3348: 2558, 3671: 1113, 3239: 9462, 3881: 3050, 4144: 2981, 3477: 3981, 3823: 2810, 3487: 3734, 2633: 3029, 1397: 1005, 4215: 3827, 2509: 1920, 1709: 1088, 4110: 1282, 2033: 2023, 3352: 5181, 3604: 4909, 2982: 1690, 990: 6105, 2147: 3724, 3732: 5070, 4190: 1024, 1317: 6584, 1518: 1879, 2883: 4537, 2927: 1069, 3378: 1039, 1044: 5509, 3539: 2574, 2962: 373, 2305: 984, 2238: 4402, 4268: 1476, 2685: 6054, 2811: 2089, 3781: 31, 2688: 3709, 3165: 6858, 3360: 5581, 3712: 3786, 3403: 0, 4172: 1891, 4252: 1052, 3368: 70, 3672: 2548, 4347: 7936, 4124: 2602, 2194: 1231, 3237: 3386, 1942: 803, 4387: 1988, 3593: 778, 1424: 1138, 2206: 2762, 3124: 2339, 4121: 893, 1583: 1459, 2659: 3025, 2584: 3077, 1827: 3030, 2678: 4110, 2914: 1802, 1839: 760, 3374: 2693, 3859: 3605, 2671: 1362, 1890: 3019, 1564: 4703, 1087: 5927, 3876: 6368, 4254: 4041, 3583: 3390, 1515: 826, 3690: 1657, 3695: 1359, 2452: 209, 4293: 3901, 3345: 3165, 2717: 73, 1155: 187, 1198: 593, 4322: 2450, 3518: 2918, 3306: 3163, 1141: 7119, 3407: 2164, 1927: 5178, 4234: 6081, 3723: 6807, 3179: 2714, 3596: 6323, 1181: 4594, 3893: 5105, 3964: 1720, 1924: 578, 4307: 1877, 3385: 180, 2106: 6263, 1393: 3459, 3561: 1547, 3633: 5308, 3862: 2015, 2367: 2713, 1207: 4051, 1812: 851, 4250: 7372, 3127: 1911, 2332: 6211, 2036: 1368, 4112: 6045, 3281: 4540, 2928: 131, 3531: 5773, 3591: 2402, 1527: 645, 3779: 190, 2174: 3512, 3261: 1420, 3307: 3431, 3705: 1054, 920: 1300, 4397: 2360, 3478: 24, 3155: 2636, 3970: 570, 3003: 4409, 1793: 2213, 3506: 8561, 3031: 4161, 4522: 5923, 2015: 2378, 1396: 1688, 3320: 2740, 3395: 4986, 4033: 1968, 1531: 214, 2505: 2792, 4119: 2736, 3301: 4118, 2289: 4217, 2625: 2344, 2884: 24, 2704: 3344, 4507: 4229, 3502: 1371, 3203: 3062, 3040: 223, 3841: 3809, 3429: 2085, 2172: 1987, 2706: 1374, 944: 2242, 1743: 4805, 3113: 290, 2057: 2003, 3441: 2182, 2554: 6, 2282: 4860, 2803: 5152, 2301: 2796, 2460: 4253, 3645: 2623, 2181: 2130, 3864: 2784, 4495: 6620, 3628: 392, 2769: 223, 2084: 3219, 4542: 4938, 2628: 2965, 1151: 5000, 3508: 304, 2795: 4338, 2179: 3273, 1298: 1268, 2029: 347, 4280: 2293, 1168: 2948, 4089: 412, 4023: 2888, 634: 3622, 4351: 2833, 4321: 7838, 2266: 7609, 4113: 2518, 4539: 3714, 798: 2376, 4207: 97, 4226: 4439, 3389: 15, 2597: 2061, 4337: 3568, 4447: 2877, 4334: 7048, 3853: 3698, 2838: 4388, 4615: 756, 4221: 974, 3440: 4216, 2732: 5574, 4685: 3445, 3475: 4270, 4341: 3125, 2874: 3642, 4183: 3834, 1723: 748, 1952: 6398, 2885: 1148, 1309: 7499, 3447: 5589, 3664: 1997, 2065: 4495, 2709: 2794, 3545: 5439, 3045: 7606, 3567: 5279, 4512: 2885, 1366: 352, 4147: 429, 3063: 1499, 3171: 2351, 4073: 3656, 3937: 851, 3523: 4659, 3894: 7111, 4208: 421, 2694: 1410, 4127: 2090, 3064: 1295, 4026: 1988, 2116: 1179, 3609: 5616, 4070: 3829, 1584: 8560, 2667: 1632, 2616: 1075, 3997: 1843, 3013: 2489, 2801: 6822, 4132: 746, 1816: 4911, 3246: 4127, 661: 2393, 1977: 2963, 3977: 3625, 4545: 5821, 3253: 3084, 4488: 3996, 4605: 3843, 4699: 2687, 674: 1237, 2185: 44, 3906: 2165, 2360: 686, 4627: 2459, 4744: 2015, 2705: 394, 4562: 7653, 1214: 2951, 3553: 2990, 4533: 2586, 4511: 646, 3731: 3308, 4275: 3969, 2984: 4747, 4210: 136, 3227: 4335, 2348: 2679, 2105: 4359, 4663: 2991, 3511: 3417, 2303: 3578, 1832: 1220, 4213: 4341, 3839: 17, 3851: 6679, 3198: 4653, 4319: 7360, 3996: 3077, 692: 638, 3145: 7646, 1270: 4734, 4423: 4666, 4162: 857, 4037: 3390, 3283: 2664, 99: 2998, 4573: 3196, 4173: 4313, 3089: 4362, 4556: 2264, 4544: 4763, 1732: 781, 4318: 452, 4398: 1192, 3924: 92, 4009: 1584, 2642: 3942, 3885: 4522, 4361: 325, 1074: 1955, 2891: 2825, 1572: 2584, 2691: 4836, 2433: 4257, 2830: 5234, 2548: 3157, 4822: 4525, 4102: 4748, 2759: 2492, 3840: 832, 4709: 4443, 4407: 4088, 4791: 1553, 1987: 854, 4536: 1131, 4083: 2015, 3830: 5436, 2240: 5293, 1588: 8193, 4563: 1530, 4278: 430, 4793: 4036, 3481: 3336, 3207: 297, 4590: 2369, 2726: 3449, 2182: 4035, 4087: 2506, 4335: 2172, 3668: 747, 4353: 6080, 3159: 1066, 2108: 1349, 2545: 3793, 3710: 306, 3269: 2143, 2675: 1379, 2056: 1988, 1621: 1441, 4309: 305, 1721: 4989, 1513: 663, 365: 1734, 2342: 3607, 4722: 2617, 2587: 4833, 4004: 2114, 4654: 4490, 1858: 242, 3088: 4968, 3566: 3911, 4454: 1264, 4011: 2931, 3259: 3372, 1913: 4475, 3067: 1347, 3756: 6899, 4339: 2989, 4007: 6919, 4956: 1204, 3516: 4723, 4773: 2125, 2437: 1099, 1897: 2943, 4575: 365, 1374: 2868, 2062: 2098, 3865: 737, 2191: 4649, 2203: 1967, 1825: 6216, 3891: 6139, 4409: 5162, 4197: 867, 3738: 3313, 830: 6011, 4270: 3416, 4373: 7005, 2040: 1071, 3448: 4690, 3957: 3903, 3288: 1608, 4636: 1963, 3006: 969, 4385: 2402, 2039: 2498, 2946: 5355, 2157: 1959, 1849: 4417, 3108: 7374, 4774: 4315, 3751: 4276, 4181: 4469, 3022: 344, 3570: 2680, 1693: 2502, 3889: 1899, 3427: 3177, 4279: 1698, 3847: 3062, 3816: 2837, 3673: 862, 3646: 4424, 1146: 3148, 2677: 3882, 1162: 4383, 2711: 5653, 4180: 1415, 4348: 1252, 3559: 2185, 4990: 6082, 4482: 2531, 2707: 3070, 3051: 3559, 2352: 2179, 4946: 1391, 3776: 5806, 4985: 4053, 2618: 3087, 575: 3333, 3505: 1793, 1975: 4082, 1625: 1682, 4733: 1129, 3575: 8129, 3726: 2081, 3780: 251, 3763: 6899, 5092: 754, 5071: 3259, 2793: 3284, 4864: 207, 4758: 1902, 1279: 3352, 4484: 4764, 1981: 2634, 4738: 1025, 4441: 2594, 2635: 5431, 4471: 4174, 4580: 401, 4725: 1531, 5111: 4648, 4608: 2089, 3917: 4428, 4350: 2726, 2382: 2832, 5000: 2012, 4450: 1413, 3598: 5055, 1242: 4497, 3492: 669, 3750: 4938, 1457: 3571, 4491: 1549, 2620: 6703, 4645: 3020, 4140: 4418, 4359: 7665, 2447: 961, 2316: 523, 1970: 527, 5181: 3114, 4701: 714, 4442: 298, 3576: 359, 3908: 5353, 2814: 4398, 4051: 1953, 1556: 2674, 3454: 864, 2501: 257, 4416: 779, 1458: 4535, 4891: 2718, 4333: 4551, 4786: 590, 4849: 587, 5190: 5040, 2976: 5080, 3818: 7238, 4735: 135, 2242: 4767, 2650: 5658, 3884: 2449, 3858: 3496, 3733: 188, 3904: 3042, 4306: 368, 2571: 4574, 5130: 2445, 3913: 307, 5236: 4463, 4305: 6028, 4969: 1564, 3501: 692, 5230: 855, 3536: 96, 1971: 970, 3842: 800, 3743: 1444, 3968: 996, 3804: 1561, 2293: 3785, 1451: 4030, 4553: 4205, 2996: 1634, 4330: 4226, 2573: 2133, 4896: 1929, 4814: 3316, 3719: 1028, 1860: 6123, 3150: 3595, 3945: 2838, 2410: 601, 3587: 749, 3059: 1506, 4117: 4259, 4984: 1362, 3813: 4708, 725: 437, 2802: 5002, 3991: 2195, 3054: 4642, 3500: 7600, 4404: 4460, 2940: 3690, 4251: 4795, 1284: 2687, 4625: 2446, 4721: 1532, 2107: 2958, 2095: 5002, 3799: 704, 4292: 4403, 5089: 3630, 4895: 3223, 4480: 3971, 3973: 4906, 3699: 557, 4639: 5302, 3833: 593, 1835: 541, 5294: 2423, 2209: 3101, 4854: 7570, 3589: 3313, 2920: 2440, 2818: 4357, 4808: 5282, 4734: 4529, 5221: 1049, 973: 810, 3805: 4629, 4193: 4531, 4308: 2489, 1786: 5156, 5311: 1227, 2917: 4172, 4040: 1053, 4589: 3996, 5335: 1131, 2673: 4205, 4871: 2405, 4052: 4025, 3080: 183, 4527: 687, 3433: 1296, 4328: 2528, 2419: 3217, 3676: 4867, 4068: 838, 2744: 970, 3167: 4750, 1823: 895, 1036: 1795, 4028: 1638, 676: 854, 5244: 1838, 4546: 4757, 4248: 7284, 4737: 5864, 1176: 1449, 5100: 118, 4762: 4019, 5242: 512, 5296: 925, 3400: 1299, 3058: 419, 3413: 3714, 4801: 1416, 3650: 4257, 2544: 4991, 4106: 1383, 3293: 5049, 2112: 3782, 4237: 4740, 4154: 3980, 4651: 5474, 3922: 4397, 2384: 954, 2562: 2304, 3555: 2839, 4947: 845, 5358: 1657, 4995: 1174, 2158: 3432, 4941: 7998, 3752: 1584, 5378: 1147, 4543: 7667, 5310: 7147, 4086: 1790, 3888: 4544, 2938: 6412, 1921: 209, 2676: 4280, 3310: 2778, 4098: 77, 4997: 5191, 4179: 2031, 4019: 2769, 2457: 3825, 2526: 4582, 4123: 553, 4182: 5990, 4618: 31, 1053: 4727, 5078: 2418, 4386: 1428, 1759: 5003, 1107: 6393, 5260: 2285, 2789: 2963, 5443: 4216, 4185: 2769, 4637: 1203, 2317: 4309, 5317: 3868, 3439: 2285, 3654: 5229, 4927: 4891, 2138: 5015, 4001: 3812, 4249: 5422, 3956: 4668, 1879: 5245, 5482: 3084, 4452: 933, 4591: 7151, 4798: 303, 1160: 3516, 2378: 4677, 3498: 5890, 2713: 1855, 3724: 568, 4869: 5485, 4707: 4327, 5353: 4845, 1187: 891, 5577: 818, 1534: 4969, 1412: 809, 4152: 922, 2414: 5376, 1760: 5567, 1122: 5227, 4648: 2132, 5218: 2605, 4826: 5484, 4448: 2676, 3941: 3437, 4515: 1774, 5036: 463, 5440: 5384, 3286: 4229, 5149: 2372, 4818: 4960, 2403: 4990, 3248: 4265, 4833: 2622, 3377: 321, 1884: 374, 4954: 1477, 3125: 8003, 3364: 5706, 677: 4453, 3949: 3750, 3068: 3423, 4867: 2443, 4419: 4785, 4492: 3117, 4006: 1711, 5119: 3815, 5292: 4242, 464: 1528, 5193: 3790, 5315: 4262, 5496: 317, 2449: 3989, 3465: 5284, 2199: 786, 4261: 4792, 1734: 4275, 3644: 44, 4559: 5293, 4256: 5263, 329: 110, 4897: 5440, 4603: 3834, 2622: 6960, 2298: 1597, 3250: 6580, 983: 2499, 5158: 8679, 5567: 2459, 5056: 3254, 5570: 5809, 5049: 5322, 5101: 2050, 2297: 1903, 4939: 971, 440: 345, 2300: 1249, 4948: 872, 2606: 3176, 1335: 1001, 4727: 580, 3258: 1384, 3962: 6749, 3701: 1571, 5090: 3543, 5715: 5762, 4163: 4741, 3630: 1007, 5619: 5982, 3444: 2375, 2208: 673, 1772: 935, 4426: 542, 5390: 5248, 4415: 4976, 888: 1206, 4260: 2979, 5120: 2183, 2787: 7308, 2113: 2159, 5094: 4662, 4827: 7726, 3457: 3860, 3156: 2515, 3220: 1668, 4445: 1065, 4719: 1793, 5066: 406, 5455: 2482, 5249: 7285, 3702: 6224, 5361: 4214, 4356: 3608, 3292: 3814, 5675: 4728, 2783: 4563, 3303: 3581, 4166: 1112, 5179: 3336, 4456: 4612, 4778: 2246, 1866: 3177, 4736: 751, 5728: 1948, 5550: 2391, 1666: 1564, 5657: 1338, 4933: 2125, 4729: 4471, 3141: 1982, 4760: 8870, 4219: 3130, 3753: 1606, 4126: 338, 4411: 3413, 2465: 3346, 4143: 775, 4578: 8204, 1674: 1219, 3075: 5823, 3222: 2394, 5464: 3389, 3533: 4508, 2281: 5856, 2168: 3314, 5199: 4937, 5177: 7223, 4620: 2001, 4857: 426, 5535: 5226, 5416: 2337, 2953: 7155, 5328: 5159, 5334: 7, 5783: 1932, 3617: 1031, 4535: 2028, 2190: 2817, 2446: 7889, 4204: 360, 4294: 2188, 5240: 2287, 4531: 4689, 3462: 8444, 5125: 3949, 4680: 3155, 5336: 3226, 5599: 5425, 4987: 3841, 4570: 9262, 1002: 7320, 4053: 3701, 4612: 176, 4058: 3168, 5302: 2279, 5601: 4319, 4320: 1741, 5727: 2645, 5406: 2936, 2575: 6630, 4945: 1421, 2555: 8376, 3986: 4401, 5306: 3466, 4043: 4955, 4843: 5796, 5558: 2332, 5052: 6400, 4966: 2260, 3767: 5110, 4377: 1151, 4524: 2826, 862: 4485, 5030: 3710, 3741: 5002, 1667: 8774, 1964: 536, 2201: 1840, 4078: 8856, 3747: 718, 5441: 3342, 4885: 4062, 4141: 6981, 3232: 537, 4525: 4375, 2788: 3639, 5035: 5116, 2058: 2261, 3642: 2854, 4084: 1964, 2972: 5251, 4523: 2682, 4425: 2864, 3907: 2152, 5838: 1537, 3472: 3348, 1426: 6350, 2735: 1874, 5319: 2404, 5685: 4169, 4963: 3721, 4835: 200, 5970: 528, 3662: 1827, 2365: 926, 1618: 1793, 5706: 2800, 4003: 339, 4919: 4660, 5117: 3466, 2640: 1994, 3850: 6834, 5580: 2729, 3122: 2931, 5137: 1334, 1700: 5987, 5105: 4162, 5067: 1180, 3191: 1455, 2396: 2061, 1893: 1601, 3693: 4945, 2773: 2603, 5017: 3942, 5409: 2785, 3530: 513, 5344: 1453, 4122: 2290, 1733: 5046, 3709: 710, 5385: 5082, 5332: 157, 4780: 5655, 1441: 7065, 3768: 6488, 1488: 3659, 5081: 4114, 2139: 962, 4196: 3780, 3077: 6493, 4824: 129, 4586: 5117, 4641: 971, 4421: 1010, 2146: 946, 5423: 1945, 1461: 5991, 2546: 2688, 4467: 5580, 5646: 2933, 1791: 5377, 5330: 4530, 5598: 3596, 2879: 499, 5165: 553, 4302: 4601, 5686: 3892, 4742: 4792, 5803: 6757, 2592: 5356, 3879: 2509, 3697: 5140, 2217: 197, 5222: 1322, 3916: 710, 4557: 2887, 3972: 6313, 6066: 5891, 4902: 3000, 2672: 1312, 2292: 1810, 1649: 2246, 4486: 3119, 3696: 3050, 5984: 3400, 4770: 914, 3423: 2925, 4508: 1301, 226: 3090, 5695: 3081, 2490: 2298, 3490: 450, 4295: 5352, 2275: 1956, 5072: 957, 3974: 738, 4911: 1553, 4096: 3431, 4016: 457, 5511: 5209, 3012: 1797, 1783: 5109, 2126: 4932, 4259: 1369, 6050: 4906, 4567: 2751, 4767: 3958, 6014: 4686, 5624: 6018, 2994: 98, 5629: 231, 5370: 3429, 1318: 4509, 2176: 2425, 4602: 115, 1259: 4768, 3796: 718, 3419: 3801, 3208: 5838, 1978: 381, 6075: 4173, 3090: 2281, 4568: 2631, 5299: 5325, 3468: 2962, 5495: 2358, 2835: 1143, 1713: 3801, 2456: 1539, 5381: 7451, 2398: 7693, 6184: 1745, 5252: 2106, 5769: 2197, 5871: 5205, 5182: 492, 4460: 7996, 5084: 2019, 5687: 4965, 5708: 8186, 4784: 3928, 1204: 4062, 5760: 1261, 3354: 5750, 1322: 4732, 5064: 373, 4233: 3555, 5436: 7086, 5504: 2996, 4148: 2851, 4036: 6680, 5227: 7167, 2395: 3243, 2001: 5034, 6021: 4645, 1452: 1614, 4691: 6832, 3317: 490, 5267: 885, 5597: 5683, 4647: 4222, 5976: 2229, 5863: 2730, 3557: 3190, 3121: 5268, 4792: 4413, 5029: 2807, 5413: 5102, 942: 8585, 3404: 2298, 1093: 2735, 3714: 4658, 5945: 309, 2880: 3849, 2572: 1995, 6175: 995, 4538: 5213, 5439: 5128, 5940: 3876, 2427: 328, 5116: 6650, 2374: 2325, 2221: 4653, 4830: 5269, 4532: 2416, 3547: 1650, 2559: 3596, 5445: 1255, 717: 5724, 3194: 5711, 6325: 3612, 6290: 7270, 3290: 315, 5586: 1795, 4611: 7388, 2733: 4784, 5170: 8115, 4370: 4819, 4962: 789, 1855: 929, 5664: 396, 2226: 7957, 5899: 2453, 4937: 1625, 5859: 1369, 3153: 6443, 6383: 7839, 4951: 4900, 5402: 3703, 4178: 3235, 4592: 8476, 5531: 3478, 2440: 5894, 5414: 6110, 5432: 7044, 5696: 1563, 6138: 413, 4192: 2057, 5191: 4377, 6086: 5243, 4977: 2114, 4449: 990, 4771: 421, 3195: 2752, 2043: 5437, 3918: 3616, 6062: 1327, 5183: 6850, 3519: 1403, 3762: 8134, 4200: 1130, 3223: 2145, 6096: 6293, 5028: 3203, 3861: 4706, 3960: 5356, 4103: 4978, 6181: 3191, 6242: 3112, 5396: 2633, 4803: 3244, 5392: 6354, 4401: 5890, 5309: 2476, 5526: 6695, 2003: 1328, 5680: 6715, 4503: 3383, 5542: 1841, 1464: 4891, 4357: 5588, 6323: 3001, 3606: 5848, 4465: 1788, 2847: 3681, 4345: 430, 5204: 2057, 3706: 3151, 3366: 1647, 3537: 7269, 5892: 896, 4676: 457, 3365: 2357, 1737: 4697, 4598: 3309, 1254: 4753, 4116: 4718, 5562: 3256, 4928: 4486, 4285: 5905, 2271: 1769, 2966: 2146, 5767: 7238, 6041: 809, 2819: 2744, 5118: 1904, 3149: 5089, 4042: 2016, 6130: 5583, 6384: 251, 4049: 2380, 5234: 5499, 6215: 2032, 4764: 231, 4487: 4635, 3782: 5712, 6317: 1719, 5293: 5783, 838: 2021, 2005: 1833, 4755: 8129, 6178: 8982, 1577: 6788, 4913: 5131, 6219: 5840, 3224: 2045, 3600: 4273, 2227: 4019, 5603: 6259, 6277: 1510, 2215: 390, 4029: 407, 4635: 6886, 5261: 2639, 3479: 3019, 4413: 7768, 6040: 4240, 1842: 3952, 6264: 5775, 6509: 2275, 1965: 4963, 6468: 6279, 4875: 1335, 3270: 2860, 4368: 4854, 5073: 1631, 2310: 5579, 3954: 4727, 5876: 8195, 3120: 3955, 6421: 6699, 3132: 5910, 4291: 323, 3271: 1207, 5585: 5881, 6161: 784, 2514: 4877, 5220: 2855, 3367: 1537, 5074: 604, 5054: 5363, 6180: 5160, 4375: 5896, 3757: 6615, 6334: 8807, 3976: 4240, 5215: 4743, 5189: 2996, 4343: 6300, 701: 6481, 5343: 1642, 2924: 1328, 4633: 5618, 5346: 2975, 3932: 815, 5501: 852, 1889: 5379, 4369: 3268, 5367: 3160, 4604: 2369, 4851: 2894, 6098: 7234, 6505: 6304, 4510: 8247, 4844: 6372, 1861: 6223, 4551: 3360, 5272: 4131, 5963: 4655, 4432: 7942, 2808: 5425, 3811: 7245, 3927: 2460, 5850: 3834, 3522: 3850, 5278: 4118, 1420: 6495, 3679: 6532, 2831: 5332, 5247: 7746, 2302: 4384, 2431: 6179, 5156: 4048, 6320: 5623, 4606: 6211, 5553: 3978, 2468: 3532, 5431: 2176, 2290: 3107, 6285: 3937, 3928: 2152, 4881: 2949, 5913: 1683, 4101: 822, 2948: 2403, 3666: 3008, 6282: 6455, 4898: 2931, 4057: 7133, 5150: 2551, 4800: 3610, 5393: 7265, 5741: 2844, 5941: 5754, 4868: 6728, 3571: 6064, 6363: 4603, 5658: 7874, 3546: 3086, 4184: 2870, 4820: 6493, 4167: 4720, 2035: 2231, 5208: 2255, 5473: 6626, 3305: 1272, 4064: 6632, 5731: 3378, 4313: 6574, 6760: 402, 6386: 4769, 6581: 2560, 6478: 941, 6804: 6533, 2809: 6141, 3815: 2838, 6835: 5800, 6617: 4548, 3605: 5572, 6662: 7371, 5415: 3056, 3641: 2357, 5001: 5094, 2919: 6270, 2061: 5986, 3608: 2225, 5148: 5571, 845: 5125, 6818: 3906, 4848: 5015, 5750: 5973, 5517: 3330, 2999: 798, 6417: 2877, 2611: 2288, 4953: 4386, 4340: 6209, 4526: 1802, 3399: 2228, 6543: 4536, 2358: 5253, 6018: 4742, 5180: 1104, 901: 653, 3148: 4523, 5138: 600, 887: 973, 3637: 1654, 5079: 4666, 5921: 3031, 6675: 5367, 4242: 782, 4393: 2957, 5333: 2516, 4883: 2515, 6392: 2406, 4283: 4738, 6373: 4225, 2362: 4366, 6176: 4748, 4842: 2554, 4950: 4688, 3948: 2110, 1936: 1766, 2731: 5619, 4399: 5552, 3298: 3512, 6470: 6397, 5124: 1814, 5176: 4044, 4769: 2499, 6890: 3913, 4010: 3382, 6789: 5258, 3717: 4897, 1731: 405, 2614: 4413, 5341: 5602, 5608: 614, 5824: 1109, 5792: 1201, 6278: 3051, 4853: 9526, 2942: 4014, 3669: 2641, 4405: 3946, 2781: 4380, 6726: 3104, 1851: 4368, 6559: 8333, 4904: 4181, 5668: 6558, 6026: 1334, 5513: 5039, 1616: 4809, 792: 4257, 5549: 5277, 3009: 4638, 2872: 2826, 6227: 7476, 6002: 4935, 5593: 6527, 6799: 3404, 6792: 6992, 1373: 5842, 4104: 675, 979: 1133, 2729: 2348, 2567: 6133, 2585: 5207, 4876: 6929, 5033: 1364, 5270: 5586, 4656: 6335, 5784: 4812, 5934: 6383, 5503: 566, 6676: 3306, 5833: 956, 3978: 2872, 6511: 1040, 6744: 1516, 5058: 4679, 5005: 3889, 1822: 36, 4621: 2164, 4517: 1264, 4952: 6983, 2741: 1256, 4222: 2034, 5070: 3005, 2415: 6776, 6973: 6971, 3048: 1085, 5112: 5324, 6670: 1421, 5762: 2463, 2865: 1292, 5587: 3090, 1922: 996, 6319: 2521, 6852: 6385, 4697: 5696, 3517: 554, 823: 401, 4550: 901, 6725: 5739, 6783: 5522, 5304: 1421, 4395: 1489, 5201: 3857, 7055: 3560, 2481: 9095, 5965: 1495, 4272: 2534, 2886: 2470, 2143: 1927, 5246: 5268, 2053: 3211, 5822: 1165, 5499: 3525, 5442: 2405, 3860: 4897, 6377: 2063, 4372: 3613, 2964: 1159, 7121: 3721, 5110: 5539, 577: 1287, 4045: 7110, 5547: 4147, 2243: 2017, 6283: 8633, 5802: 6463, 7021: 775, 4025: 4135, 4976: 8487, 6751: 4364, 6350: 6800, 6845: 830, 3387: 787, 2959: 6725, 6557: 6467, 4617: 6092, 542: 3783, 5263: 5993, 7042: 7009, 2399: 5076, 4039: 5449, 3471: 2960, 6497: 3273, 6964: 5446, 6952: 3121, 2856: 3367, 5338: 4538, 3083: 5957, 3829: 3178, 5848: 704, 6389: 339, 6958: 5984, 4054: 4592, 5372: 4088, 2755: 3758, 3072: 3941, 1708: 1925, 4111: 2447, 3901: 2583, 4905: 5476, 4008: 522, 4424: 2139, 4349: 717, 3282: 5156, 2907: 2309, 6012: 4300, 3185: 287, 5705: 66, 4085: 6139, 4498: 2969, 5133: 988, 2192: 5859, 4267: 2081, 3873: 4437, 6552: 1932, 6422: 816, 4128: 5582, 7144: 4248, 3382: 4789, 6035: 158, 598: 1677, 5901: 41, 5857: 6851, 6981: 6273, 2658: 3878, 5041: 1555, 5878: 1905, 5640: 609, 3470: 327, 6195: 7139, 6817: 601, 6625: 5952, 644: 2819, 6461: 171, 4358: 5455, 4684: 6349, 5908: 3446, 4014: 2558, 1764: 378, 5947: 591, 6644: 2412, 7090: 5036, 6513: 5151, 5843: 2544, 5505: 4765, 6684: 1233, 4813: 3597, 4074: 4449, 4682: 955, 2151: 3612, 7034: 1255, 3251: 7186, 3137: 5656, 5702: 6427, 6047: 6348, 3764: 2813, 5108: 5324, 4301: 2224, 4298: 153, 4643: 6667, 5937: 417, 7269: 39, 5524: 2212, 5478: 5657, 5793: 3732, 2922: 3557, 4081: 3262, 5975: 5028, 3358: 8852, 6517: 518, 5198: 217, 6079: 4222, 7339: 2767, 6322: 1409, 5751: 977, 7051: 4823, 7297: 5390, 2905: 3818, 4554: 683, 3946: 3007, 4564: 957, 2241: 4682, 7243: 2001, 6375: 3602, 2471: 4691, 3326: 5607, 3161: 5299, 5040: 1852, 2512: 7004, 7230: 3243, 5205: 2612, 5280: 6500, 5794: 1783, 323: 2553, 6945: 2547, 1593: 1324, 4967: 3648, 4971: 4089, 5484: 1673, 5953: 592, 6553: 7253, 7291: 1235, 4238: 4083, 5281: 274, 6316: 3951, 6563: 7096, 6584: 5161, 5289: 5264, 1462: 2980, 4677: 6724, 7199: 3916, 5143: 5721, 5472: 3533, 3458: 5081, 3528: 5812, 6081: 2584, 6738: 6592, 2309: 8319, 3236: 4146, 3874: 3057, 3854: 6382, 3484: 5654, 270: 3182, 7326: 2991, 5528: 2142, 4205: 2087, 2224: 5252, 6885: 4369, 7156: 2304, 6064: 578, 2866: 946, 5656: 3679, 6976: 5525, 5790: 1552, 3346: 7499, 7318: 1366, 2990: 6960, 5992: 3137, 5011: 256, 1690: 2399, 6708: 1295, 3868: 4886, 5978: 6554, 6545: 7231, 3453: 6774, 5974: 7457, 2162: 2611, 3880: 6720, 2444: 723, 6173: 1378, 3832: 1546, 2389: 5220, 3115: 7057, 6627: 6580, 5068: 6474, 3409: 1169, 3262: 2775, 5418: 5929, 6695: 2315, 5781: 5847, 6550: 3192, 6204: 3890, 7562: 689, 5738: 5443, 2234: 4042, 7309: 7359, 3056: 4422, 7196: 5043, 4795: 3126, 5900: 5766, 4658: 7200, 1640: 3748, 6542: 3720, 4462: 5485, 4717: 6414, 6663: 2043, 3005: 7518, 3659: 4401, 6540: 4706, 2532: 6406, 7539: 3350, 5021: 3453, 6396: 4301, 4679: 3538, 6946: 285, 3995: 6361, 3775: 2997, 2394: 1145, 3897: 6995, 3725: 352, 3357: 3784, 4572: 5900, 5384: 3253, 6961: 1007, 6701: 2725, 6657: 230, 5490: 5914, 5994: 4186, 7019: 3322, 6719: 6094, 3302: 6262, 4614: 3853, 4274: 5920, 4174: 531, 6432: 344, 6957: 3732, 3765: 5580, 7530: 6925, 2507: 2601, 7128: 6140, 1088: 2512, 6936: 8027, 4427: 6662, 5529: 296, 5904: 4740, 6529: 6829, 3887: 5722, 3139: 4936, 5275: 6470, 6948: 331, 7438: 2436, 7355: 1148, 4996: 1725, 7603: 2314, 4229: 1471, 6986: 3910, 4282: 5238, 4593: 2543, 7088: 8216, 7077: 3428, 1695: 4173, 5424: 5749, 7069: 2746, 6987: 957, 4469: 6864, 2483: 7439, 6165: 7804, 3827: 5841, 7474: 7678, 7396: 2244, 6739: 8045, 7143: 7498, 7028: 3245, 6286: 6244, 5060: 6145, 1589: 4040, 6787: 122, 4922: 4746, 4839: 3930, 7592: 4046, 1995: 5102, 7314: 3636, 5936: 754, 7617: 5828, 4118: 1512, 2522: 9143, 6240: 2749, 3975: 4284, 6106: 519, 6686: 5361, 7731: 1816, 4466: 5826, 2494: 1072, 7288: 2460, 6589: 3181, 7542: 3936, 7039: 4153, 7368: 2005, 2845: 7063, 2404: 3057, 6346: 4692, 1953: 2281, 4745: 5074, 5398: 6842, 294: 395, 7737: 4641, 7180: 5655, 5171: 5105, 5614: 7180, 617: 7697, 7527: 196, 5109: 2239, 2052: 355, 2898: 6180, 4475: 5826, 3018: 6861, 6640: 1479, 4338: 511, 6225: 7947, 2473: 1464, 6768: 1982, 7504: 6911, 7432: 2872, 6730: 4526, 7044: 5879, 4804: 133, 7805: 7015, 6710: 872, 4504: 195, 2638: 164, 5996: 2747, 2607: 3593, 1949: 6620, 5460: 720, 7597: 6603, 5339: 2999, 7124: 1196, 7390: 4474, 4726: 1059, 7280: 3917, 2568: 8219, 2244: 3323, 4974: 758, 7754: 5854, 5902: 6900, 3476: 5184, 7464: 7310, 6366: 1039, 7084: 7519, 3773: 1108, 2285: 7032, 6992: 3112, 3564: 1975, 6172: 6056, 4362: 194, 2467: 3867, 6857: 6743, 2923: 4071, 3653: 5570, 7424: 4947, 4269: 492, 6344: 704, 1507: 5645, 4227: 588, 5364: 4060, 7187: 2907, 6274: 2827, 7221: 3984, 940: 834, 5196: 1579, 1716: 3410, 574: 5430, 6141: 4503, 6359: 5830, 6052: 3173, 3323: 5700, 6979: 2564, 6615: 3339, 7188: 1138, 6314: 4358, 6059: 2449, 6984: 2707, 3107: 1205, 3921: 2032, 6834: 2410, 6301: 7152, 6492: 2185, 1789: 5922, 946: 5273, 2402: 2540, 7705: 3650, 4352: 276, 2376: 3789, 4915: 3479, 7439: 4898, 7928: 1056, 7774: 2149, 2370: 4410, 6127: 557, 4198: 4099, 5015: 2088, 7914: 374, 5037: 7477, 7049: 4184, 4889: 33, 5763: 6147, 3507: 5522, 2204: 624, 4316: 4530, 7138: 3074, 4811: 501, 6019: 846, 6679: 4574, 3039: 1367, 7002: 480, 4290: 2773, 3551: 4294, 7699: 2299, 6004: 4970, 6436: 5428, 7888: 1265, 7523: 57, 6903: 5768, 6753: 4713, 5667: 5238, 6192: 6477, 5552: 3533, 5454: 5134, 2528: 376, 3836: 7457, 5779: 5910, 7099: 2681, 7477: 6342, 5004: 4052, 6429: 3952, 6534: 1808, 7835: 1178, 7134: 8516, 5062: 5769, 6142: 1949, 2131: 3189, 7811: 3494, 5002: 5102, 6020: 533, 6385: 1284, 5967: 1805, 2612: 2961, 7894: 1055, 6841: 6873, 6881: 114, 7717: 8319, 7211: 5135, 5560: 4473, 7410: 4750, 6902: 588, 7308: 4425, 5422: 7450, 5739: 4044, 7974: 5779, 4569: 5746, 8026: 126, 6332: 5154, 6842: 5786, 3095: 7603, 7566: 787, 6772: 1872, 7672: 254, 7469: 2804, 6447: 2104, 5238: 972, 7333: 3325, 7347: 4701, 7052: 4189, 7878: 931, 7942: 81, 6410: 370, 6991: 3800, 7427: 2139, 3819: 1766, 2253: 1287, 5301: 5069, 7449: 7096, 4211: 6035, 7375: 2231, 3980: 170, 6476: 8608, 3621: 4915, 3375: 7380, 8081: 6274, 6440: 7895, 482: 6152, 2662: 4384, 7538: 385, 4918: 7448, 6855: 790, 2140: 4280, 7725: 1706, 4925: 1832, 6628: 2403, 7250: 3832, 1803: 7594, 7899: 3805, 2133: 8104, 4176: 7525, 7283: 3651, 6340: 5949, 4018: 6765, 5395: 6451, 7510: 2996, 3337: 8149, 3895: 7453, 4560: 1601, 2451: 5481, 6251: 7580, 5869: 2280, 5759: 2940, 6402: 3835, 2631: 4209, 7923: 1338, 2930: 6272, 8024: 7627, 2746: 1056, 1363: 7461, 4970: 3637, 3898: 3358, 4453: 6962, 7351: 5903, 3943: 1913, 5736: 3306, 5832: 7980, 7547: 5234, 7707: 23, 6273: 5261, 7854: 3776, 7023: 3573, 3707: 8071, 3931: 3671, 5083: 3307, 5426: 187, 7160: 7860, 7901: 199, 1805: 3916, 5959: 5947, 7209: 2550, 3376: 8005, 4926: 1905, 5998: 3148, 7551: 304, 6376: 6489, 6546: 3279, 7342: 7533, 4100: 2014, 5169: 7143, 2130: 1057, 7688: 2538, 5733: 1604, 4809: 8115, 7755: 1197, 6923: 7346, 5305: 8465, 1510: 4023, 7140: 7627, 4186: 657, 4287: 7452, 1597: 2114, 5014: 570, 7998: 2134, 5539: 3411, 1703: 944, 5786: 6784, 7730: 1860, 8040: 433, 6813: 1094, 7771: 4920, 4496: 7586, 7461: 1827, 6395: 1653, 3296: 3708, 5479: 5635, 5849: 4489, 7587: 7708, 3607: 7708, 2311: 7766, 8030: 6859, 3105: 7080, 6715: 7439, 4505: 5402, 4816: 3574, 3615: 3374, 8190: 5145, 6656: 4800, 8210: 7584, 7281: 7643, 8105: 2594, 6034: 6687, 4943: 5268, 7651: 681, 6607: 1526, 5979: 8022, 7804: 406, 2350: 2256, 5154: 3370, 4759: 6537, 2245: 1407, 2921: 4644, 3177: 2277, 1280: 5013, 3982: 623, 8230: 5070, 7511: 5198, 4541: 8157, 8310: 6214, 7770: 3628, 6171: 1086, 6641: 3191, 5404: 962, 4903: 7286, 4323: 7007, 1854: 6630, 7812: 567, 5288: 289, 7220: 5164, 2272: 1532, 6186: 6961, 7710: 115, 3640: 993, 8018: 8520, 3443: 3338, 6887: 1828, 4815: 1285, 8306: 2778, 1807: 1837, 2904: 50, 3758: 3689, 4994: 4638, 5897: 7572, 5929: 4483, 5692: 2108, 6135: 3041, 8345: 278, 8336: 3287, 3933: 2732, 7247: 5415, 6776: 4261, 5258: 3960, 6645: 414, 4420: 6099, 8194: 4865, 4638: 2055, 7697: 1262, 3592: 4107, 5172: 5920, 8390: 3936, 7431: 4066, 3304: 6587, 6803: 6867, 3086: 5878, 7514: 2998, 6379: 8322, 7889: 3160, 8460: 7245, 6502: 2609, 7675: 3379, 4837: 8047, 6621: 3459, 7545: 5482, 7780: 2900, 5210: 5360, 6196: 2437, 3694: 8342, 8396: 553, 7615: 5665, 4993: 6282, 5955: 1265, 7259: 662, 4847: 3299, 8304: 4964, 3754: 7045, 7337: 245, 174: 5610, 8262: 4193, 7492: 2220, 1711: 1877, 8334: 244, 5540: 8214, 2968: 8288, 7306: 1864, 7341: 270, 2006: 2465, 1620: 559, 7440: 1677, 6032: 3611, 7116: 2939, 2369: 6993, 8255: 1103, 805: 5663, 5575: 1467, 7300: 5171, 6939: 6922, 4596: 7348, 2521: 1100, 8207: 4537, 6115: 5336, 1248: 1449, 3004: 8359, 7909: 8173, 6702: 3578, 3133: 4388, 7248: 7729, 2600: 7574, 7932: 2967, 8096: 2923, 4980: 8336, 5625: 5617, 4825: 1592, 7261: 6369, 7515: 871, 2911: 8445, 4797: 694, 4262: 683, 6333: 742, 5474: 3866, 4461: 2442, 6329: 8719, 8196: 2007, 1275: 820, 2430: 5305, 7496: 5949, 8327: 1250, 7406: 4604, 4852: 4908, 3103: 3320, 3169: 7538, 7579: 3945, 7215: 6393, 6361: 7046, 2493: 7536, 8359: 2439, 6092: 6303, 3674: 7155, 7836: 634, 5076: 5564, 5987: 1488, 5721: 679, 6586: 7058, 7594: 4758, 5228: 2299, 8602: 6092, 8660: 5332, 2232: 4472, 3015: 7578, 8430: 7081, 3065: 4795, 6058: 5563, 7870: 4396, 7111: 1531, 7322: 4771, 6700: 3464, 6541: 2804, 8449: 2010, 3578: 1643, 7320: 3698, 3359: 1473, 7629: 1804, 7384: 33, 8088: 350, 5388: 1826, 7411: 5029, 7893: 2985, 7338: 8416, 2641: 1081, 5885: 2489, 6169: 2067, 4418: 1495, 7749: 1204, 8563: 4948, 5891: 7563, 5818: 8865, 3562: 2410, 8767: 6941, 5139: 4717, 6356: 6565, 8520: 6096, 4355: 5203, 8097: 3203, 1019: 7932, 3521: 1333, 1261: 2709, 4931: 4188, 4908: 7721, 1770: 6735, 5283: 5851, 3955: 8399, 8155: 3899, 6469: 8632, 8295: 8055, 4133: 5506, 8122: 3095, 1909: 732, 8038: 3392, 7783: 2499, 4444: 2126, 5545: 637, 5621: 1082, 7422: 3703, 7648: 6584, 4202: 5717, 4136: 341, 5615: 7349, 7517: 6039, 4703: 5918, 6292: 2963, 7574: 6197, 7612: 5176, 2955: 2259, 8424: 447, 6854: 1571, 7719: 8401, 3602: 7571, 8288: 1144, 2757: 697, 8023: 4227, 7437: 351, 8501: 6887, 5761: 6619, 7622: 489, 2588: 7681, 7412: 3268, 4438: 1942, 534: 8124, 8507: 8162, 6869: 4443, 5836: 1041, 1133: 2286, 6642: 1662, 5285: 1225, 3636: 2074, 2326: 1477, 7335: 3386, 3510: 7879, 5530: 8785, 8598: 8172, 7792: 4048, 8595: 5183, 8662: 517, 2100: 8420, 6767: 2807, 8706: 8419, 8532: 1246, 4367: 3177, 7257: 2186, 7704: 8215, 5709: 2477, 7512: 5663, 3552: 8316, 4630: 4944, 5699: 5104, 8633: 5074, 4666: 7604, 3631: 6251, 7324: 2939, 2425: 8265, 5618: 6416, 8313: 3678, 3264: 5156, 8601: 368, 476: 1411, 8535: 902, 6042: 2404, 7540: 4175, 8786: 6820, 5497: 7227, 8558: 1533, 7885: 8163, 7667: 1687, 7871: 4177, 8279: 7092, 8406: 8133, 3038: 687, 8703: 6598, 7585: 5043, 6331: 6455, 8882: 4626, 1596: 337, 3909: 6261, 4862: 4097, 6999: 3161, 8756: 7146, 4501: 5953, 1591: 6709, 6537: 2145, 6749: 762, 1627: 1891, 8042: 2577, 7519: 5284, 8580: 9, 4428: 6591, 7159: 1570, 7810: 1238, 4365: 3488, 5809: 8968, 1973: 1446, 8683: 5057, 7441: 3524, 6564: 8785, 8397: 4154, 1571: 4396, 6031: 7115, 8488: 2266, 3817: 5943, 7782: 391, 8909: 3622, 8364: 2847, 6906: 1776, 6131: 4868, 5561: 6183, 7911: 6724, 7171: 2836, 3242: 3478, 1841: 1278, 8454: 3960, 7087: 8281, 3878: 7991, 6521: 4173, 3720: 89, 9018: 1987, 8500: 7384, 6794: 2259, 8961: 3512, 7246: 6160, 653: 4635, 8757: 8174, 8775: 7280, 6446: 1094, 4613: 7074, 2696: 2822, 2557: 3643, 6238: 2736, 6807: 4452, 8480: 8845, 4066: 7717, 3585: 8426, 7208: 1462, 8029: 1972, 4958: 5110, 7400: 4486, 2510: 748, 7508: 2794, 3969: 5308, 6143: 5914, 7258: 210, 7925: 7542, 3379: 8919, 6762: 8591, 2747: 7761, 1808: 3659, 7662: 4473, 8407: 3864, 6105: 1063, 2581: 4245, 5448: 6194, 8377: 3485, 4021: 2771, 6206: 4750, 7689: 2490, 4992: 8695, 7108: 6596, 7700: 2067, 2380: 7201, 8244: 8593, 5827: 2611, 8521: 8412, 6660: 5427, 6488: 29, 2119: 8784, 512: 6600, 855: 7934, 5989: 1071, 8036: 584, 5476: 3509, 3787: 870, 1222: 8028, 6720: 4518, 8032: 5541, 8916: 5752, 9096: 4267, 7348: 2346, 6426: 8102, 4932: 5712, 3930: 3383, 8655: 3015, 4047: 1121, 5966: 4374, 6353: 3698, 8203: 6752, 7094: 2379, 6212: 3003, 4097: 8383, 7262: 1133, 5881: 9079, 7856: 8271, 3451: 9050, 8878: 3019, 3446: 7287, 1574: 3262, 4728: 7988, 8776: 3093, 7887: 1796, 8245: 4693, 4892: 1836, 5854: 2045, 7419: 1232, 6796: 1954, 8831: 1069, 3856: 8985, 6988: 6932, 2237: 2011, 1025: 7646, 8126: 7764, 9125: 7639, 3234: 4317, 5654: 702, 8012: 392, 9226: 7886, 5155: 84, 6982: 8278, 7988: 1800, 6811: 4890, 8490: 5010, 7497: 917, 7761: 9267, 7056: 8776, 6705: 8270, 9200: 7318, 6063: 3665, 8630: 3527, 2901: 4693, 7970: 5835, 9052: 425, 8755: 5367, 7015: 674, 4500: 9142, 2170: 3172, 3638: 1770, 6874: 3322, 7078: 2316, 8750: 1404, 7732: 7137, 7627: 8585, 6507: 9287, 7756: 6493, 9235: 8372, 6100: 4317, 8686: 7097, 7154: 259, 4751: 6967, 7135: 8125, 3947: 1399, 5308: 5870, 5864: 3220, 6122: 8535, 3473: 3183, 8516: 8582, 8995: 3736, 8597: 2627, 5375: 4953, 7722: 6842, 7198: 772, 4169: 8930, 6978: 706, 7179: 8747, 7949: 314, 5010: 126, 8974: 8712, 5134: 9292, 4005: 6020, 5042: 4828, 2368: 636, 4201: 8002, 8782: 9173, 8181: 8237, 8053: 7494, 5920: 8721, 3910: 6249, 7430: 4461, 7146: 9049, 8514: 8769, 8243: 5186, 1704: 557, 8628: 3709, 6431: 8552, 9291: 8959, 6808: 5202, 1013: 4944, 6441: 3822, 9074: 1198, 6465: 168, 7073: 1135, 6793: 623, 8098: 5885, 8844: 6290, 7206: 6048, 4077: 9348, 3437: 8013, 2899: 6773, 1379: 2616, 1675: 7843, 7907: 9051, 4599: 2874, 5520: 2886, 4626: 7006, 6575: 2335, 6620: 8398, 8319: 1178, 8666: 8241, 8701: 1571, 8617: 5520, 5162: 2913, 8134: 8315, 2807: 7002, 5251: 263, 671: 4955, 8337: 2725, 6931: 2233, 6053: 8434, 1232: 7056, 6661: 554, 8620: 5584, 2834: 2320, 5956: 2901, 5345: 7144, 2577: 9194, 5669: 1478, 5957: 1737, 7483: 8128, 4873: 3477, 5613: 1579, 4297: 8942, 6193: 6858, 8128: 6240, 7997: 4078, 9177: 7859, 9315: 1538, 6101: 2808, 2595: 672, 5554: 413, 3042: 8149, 7212: 9202, 5641: 6832, 8019: 8807, 7385: 5951, 2639: 6076, 9276: 4519, 8929: 5038, 6630: 699, 1741: 6493, 8799: 5829, 2815: 9337, 5466: 6298, 7757: 2091, 5874: 2279, 5013: 8072, 3029: 2939, 8080: 5958, 9419: 9297, 2601: 9436, 4244: 1482, 9048: 1307, 5846: 7831, 7505: 1064, 4038: 4366, 4439: 7617, 5187: 2804, 8550: 2642, 3196: 8877, 6907: 9334, 4412: 4259, 3824: 9430, 3474: 6404, 6217: 2054, 6119: 8328, 9522: 5545, 7736: 5099, 4901: 3284, 6732: 6665, 7451: 5013, 8774: 3433, 8817: 8670, 7358: 2111, 1960: 4560, 6724: 8509, 5433: 6737, 8606: 6477, 7057: 4425, 7748: 6898, 7175: 7799, 6594: 671, 7920: 7733, 4880: 4216, 7646: 1390, 2169: 1519, 1788: 5312, 9227: 6462, 8789: 3240, 6154: 1625, 6862: 2918, 8158: 8905, 2762: 7975, 3683: 9397, 8117: 4992, 4506: 1346, 4035: 249, 7407: 7825, 4473: 4355, 6558: 3906, 9400: 4942, 7641: 1854, 8688: 6668, 4209: 8542, 8803: 884, 7233: 103, 8888: 7666, 5131: 9144, 7621: 5157, 8680: 710, 5113: 8298, 9483: 4915, 6183: 3897, 7992: 6321, 5104: 9396, 7025: 3827, 7647: 1892, 4998: 3207, 9046: 2969, 7576: 7909, 7720: 5932, 1752: 4915, 9496: 5806, 6428: 5217, 7844: 7946, 8884: 6624, 3297: 9231, 5097: 5533, 6825: 67, 6388: 3104, 8770: 7270, 3886: 92, 1762: 5662, 8436: 6049, 4670: 1398, 7521: 8683, 9285: 6537, 9064: 7748, 7786: 3793, 8315: 1177, 6908: 7713, 6364: 6077, 6267: 116, 7921: 7344, 8256: 2896, 7176: 6076, 3965: 6540, 8975: 8924, 5919: 5634, 8431: 1539, 4150: 6477, 7486: 9431, 3398: 394, 7416: 814, 3942: 738, 8231: 2348, 1183: 3055, 1639: 7130, 8333: 7471, 2699: 9335, 8044: 3131, 7665: 4682, 7076: 9127, 7100: 4887, 8205: 6602, 4718: 4870, 7354: 8633, 6844: 2746, 7851: 4263, 9300: 4908, 8537: 3113, 4561: 3485, 8977: 8797, 5012: 6091, 7571: 5251, 7003: 2364, 2506: 3112, 5453: 653, 3184: 4290, 7286: 1529, 6576: 4459, 2848: 4742, 5085: 6608, 5581: 1369, 5971: 3088, 5678: 8682, 9214: 655, 5720: 3198, 8971: 793, 6304: 6376, 7693: 3631, 7185: 8474, 9582: 2789, 2739: 3601, 6826: 8898, 2334: 1171, 5212: 4106, 3313: 5969, 7966: 9765, 6786: 7659, 7167: 3272, 5756: 7387, 7789: 3020, 9416: 3118, 8522: 3849, 143: 6075, 7583: 6575, 6643: 586, 8777: 8345, 9625: 9326, 6456: 7901, 9595: 7579, 5583: 3132, 1423: 3660, 5312: 9689, 2605: 8440, 6544: 337, 6287: 3732, 5590: 3539, 6262: 1495, 9703: 8853, 6302: 139, 6830: 3038, 7234: 3113, 8422: 4295, 9464: 825, 3686: 3926, 2070: 6797, 6634: 7636, 9323: 1338, 5933: 1696, 4214: 5601, 5574: 700, 8035: 9002, 3157: 9125, 7204: 5453, 8093: 9618, 7881: 5408, 9667: 5471, 6997: 7617, 5207: 8771, 2379: 2520, 4022: 7666, 4063: 795, 8717: 7180, 5515: 945, 5776: 4403, 9528: 7226, 3312: 4352, 6674: 7792, 5405: 6164, 7178: 1246, 3560: 2083, 1986: 9368, 8981: 2147, 9171: 2977, 1794: 1299, 8361: 2603, 7968: 6082, 7817: 4138, 5870: 5164, 8816: 1845, 5379: 9694, 7816: 6103, 7601: 6248, 8360: 3392, 4579: 5795, 9206: 2580, 9875: 3535, 7061: 8454, 4002: 525, 6847: 7036, 5435: 6778, 6336: 4526, 4865: 2711, 1887: 8363, 6843: 7564, 6689: 6653, 7030: 3461, 9767: 851, 6518: 9641, 4754: 9631, 3214: 7091, 8649: 3783, 8970: 1824, 7043: 6435, 7445: 3885, 8292: 7396, 6397: 7596, 5467: 2379, 2239: 4960, 9829: 5915, 3708: 4656, 5023: 8674, 5086: 8714, 6814: 8084, 9241: 313, 5602: 3648, 4671: 7449, 2294: 7594, 8546: 8071}
Dans cette partie , nous allons voir comment itérer sur un dictionnaire.
La méthode values
Pour obtenir l'ensemble des valeurs sous la forme d'une structure de données itérable d'un dictionnaire
d
, on utilise la méthode values
.
La donnée structurée ainsi récupérée est de type dict_values
, c'est un objet itérable mais non indexé.
Déterminer la moyenne de bob à l'aide d'une fonction moy(res)
Python
La méthode keys
Pour obtenir la liste (de type dict_keys) d'un objet dictionnaire d
on écrit :
d.keys()
res={'nsi' :18,'maths':17,'svt':14,'français':14,'lv1':8,'physique':12,'HG':11}
for i in res.keys():
print(i)
La méthode items()
Pour obtenir l'ensemble du dictionnaire sous forme d'une donnée itérable on utilise la méthode
items
d.items()
res={'nsi' :18,'maths':17,'svt':14,'français':14,'lv1':8,'physique':12,'HG':11}
for i in res.items():
print(i)
Par défaut un dictionnaire est itérable mais alors on itère uniquement sur les clés. Ce qui justifie l'existence de la méthode items
res={'nsi' :18,'maths':17,'svt':14,'français':14,'lv1':8,'physique':12,'HG':11}
for i in res():
print(i)
Réaliser un affichage des notes de Bob qui ressemble à cela :
Pour supprimer une élément d'un dictionnaire on écrit :
del(d[cle_a_suppr])
Supprimer le Français des résultats de Bob.
L'opérateur &
L'opérateur &
permet de trouver les valeurs communes des données obtenues avec les méthode keys, values ou items de deux dictionnaires.
Il s'utilise ainsi :
d1={'10km':'lundi','fractionné 1h ':'mardi','15km':'Jeudi', '1h':'Jeudi', 'tranquille':'Samedi'}
d2={'15km':'lundi','fractionné 2h ':'mardi','10km':'Jeudi', '1h':'Jeudi', 'tranquille':'dimanche'}
d1.keys() & d2.keys()
d1.values() & d2.values()
d1.items() & d2.items()
Voici une citation célèbre de Gandhi :
La vie est un mystère qu'il faut vivre, et non un problème à résoudre.
Créer un dictionnaire qui associe à chaque lettre (clé) son occurrence (valeur). Par exemple la lettre 'a' apparait deux fois.
Par exemple dico= {'a':2, .........}
ensemble
est une collection non ordonnée d'objets, contrairement aux séquences comme les listes et les tuples dans lesquels chaque élément est indexé. Un ensemble ne peut pas contenir de doublon.Faire des recherches sur le web pour la notion d'ensemble set
en python.
set
se déclare entre accolades. Exemple : a={} # Un ensemble vide
in
,
d'union |
, intersection &
, de différence -
Analyser les différentes lignes de code accessibles dans le trinket proposé :
Analyser le code suivant :
L6=[random.randint(1,100) for i in range(100)]
L7=list(set(L6))
print(len(L7))
A l'exécution la console renvoie 66, une autre exécution renvoie 55. Comment interpéter ces résultats ?
Les ensembles de nombres vus à travers une activité sur les critères de divisibilité.
demo(n)
qui teste tous vos critères de divisibilité et qui affiche une réponse pour chaque critère.
Vous avez décidé d'essayer de créer un réseau social Types_au_top. Pour cela, vous avez réuni vos bons amis proches et vous leur avez demandé à chacun d'en parler à leurs propres amis proches. Pour simplifier, on note A, B, ..., G et H les 8 personnes acceptant de faire partie de votre réseau social Types_au_top. Voici la liste des relation entre ces individus :
A est ami avec tout le monde sauf D et G,
B est ami avec A, D et H,
C est ami avec A, F, G et H,
D est ami avec B et H,
E est ami avec A et H,
F est ami avec A et C,
G est ami avec C et H,
H est ami avec A, B, C, D, E et G.
Malgré la faible taille de votre réseau social actuel, vous vous rendez-compte que sa description deviendra vite très obscure s'il grandi fortement, comme vous l'espérez.
Un des amis de votre réseau vous propose de visualiser votre réseau social ainsi :
Chaque membre du réseau sera modélisé par un point nommé par une lettre,
chaque relation entre deux amis sera modélisé par un trait reliant les points représentant les amis.
Afin d'illustrer sa proposition, votre ami vous propose le schéma suivant :
Ce type de représentation s'appelle un graphe (non-orienté). Ce qui est bien c'est que ce cours va détailler cette notion et que l'on verra, aussi dans un autre chapitre, des algorithmes pour les étudier. Quelle chance pour votre réseau social ! Vive la NSI !
Pour les curieux, voici le problème historique qui a conduit au développement initial des graphes.
La ville de Königsberg était une ville de Prusse puis une des principales villes de l'Empire Allemand avant d'être céder à l'URSS en 1945. Cette ville est désormais appelée Kaliningrad et fait partie de la Fédération de Russie.
Cette ville s'étendait au $XVIII^e$ siècle autour de deux îles situées sur le fleuve Pregel. Ces deux îles étaient reliées entre elles par un pont. Six autres ponts reliaient les rives de la rivière à l'une ou l'autre des deux îles, comme représenté sur le plan ci-dessous.
La légende raconte que certains habitants de cette ville cherchaient lors de promenade à passer une fois et une seule par chacun des ponts pour revenir au point de départ (évidemment, ils ne pouvaient traverser l'eau du Pregel qu'en passant par un des ponts.)
Est-ce possible ? Si oui, par quel chemin ?
Les habitants ont cherché des solutions et l'un d'eux, le grand mathématicien Euler, a réussi en 1735 à répondre à la question précédente. Pour cela, il a développé des outils mathématiques à la base de la théorie des graphes, théorie qui sera effleurée dans ce cours.
Modélisation à l'aide d'un graphe :
Une des idées d'Euler fut de modéliser la situation pour réduire à l'essentiel le problème ; il a représentée la configuration précédente des ponts dans la ville en la figure ci-dessous :
figure qui peut être déformée ainsi :
Un graphe non-orienté est un ensemble formé de points, appelés sommets, reliés par des lignes, appelées arêtes.
Deux sommets reliés par une arête sont dits adjacents.
Un graphe est dit complet lorsque tous ses sommets sont adjacents.
Voici ci-dessous un graphe non-orienté qui remprésente une modélisation possible du problème des ponts de Königsberg expliqué dans la remarque historique.
Donner deux sommets adjacents du graphe ci-dessus.
Donner deux sommets non adjacents du graphe ci-dessus.
Le graphe ci-dessus est-il un graphe complet ? Pourquoi ?
Comment rendre le graphe ci-dessous complet ?
Un des amis de votre réseau travaille pour un distributeur d'électricité.
Il doit proposer à son supérieur une représentation du réseau reliant différentes villes.
Comme il n'y arrive pas trop, il voudrait que vous la lui fassiez.
Pour simplifier le problème, il a déjà renommé les villes en A, B, C, D, E et F. De plus, il vous donne les informations suivantes :
la ville A est reliée par un réseau électrique aux villes B, E et F,
la ville B est reliée par un réseau électrique aux villes A, C et D,
la ville C est reliée par un réseau électrique aux villes B, D, E et F,
la ville D est reliée par un réseau électrique aux villes B, C et F,
la ville E est reliée par un réseau électrique aux villes A, C et F,
la ville F est relié par un réseau électrique aux villes A, C, D et E.
Proposer un graphe qui modélise la situation.
Ce graphe est-il complet ? Pourquoi ?
L'ordre d'un graphe est le nombre de sommets de ce graphe.
Le degré d'un sommet est le nombre d'arêtes dont ce sommet est une extrémité.
Quel est l'ordre de ce graphe ?
Quel est le degré du sommet $A$ ?
Lister les sommets de degré 3 de ce graphe.
Il est possible de considérer un graphe comme une liste de sommets, liste où on associe à chaque élément la liste des sommets liés à cet élément.
Reprenons l'exemple introductif. L'ensemble des relations :
A est ami avec tout le monde sauf G,
B est ami avec A, D et H,
C est ami avec A, F, G et H,
D est ami avec B et H,
E est ami avec A et H,
F est ami avec A et C,
G est ami avec C et H,
H est ami avec A, B, C, D, E et G.
peut être vu comme une liste d'adjacence :
En s'inspirant des listes d'adjacence d'un graphe vues ci-dessus, une façon d’encoder un graphe sous Python est d’utiliser un dictionnaire : les clés seront les sommets du graphe et leur valeur sera la liste des sommets adjacents.
Reprenons le graphe introductif :
Le code suivant permet d'implémenter un graphe en langage Python
graphe = dict() # création d'un dictionnaire vide
graphe["A"] = ["B","C","E","F","H"] # liens de A vers les sommets listés
graphe["B"] = ["A","D","H"]
graphe["C"] = ["A","F", "G","H"]
graphe["D"] = ["B","H"]
graphe["E"] = ["A","H"]
graphe["F"] = ["A","C"]
graphe["G"] = ["C","H"]
graphe["H"] = ["A","B","C","D","E","G"]
Rappels :
Vous avez vu l'an dernier dans le cours sur les dictionnaires, qu'il est possible :
d'obtenir l'ensemble des clés avec la méthode keys()
en sachant que graphe.keys()
est un itérable,
d'obtenir l'ensemble des clés avec la méthode values()
en sachant que graphe.values()
est un itérable.
En s'aidant de la remarque précédente, proposer une fonction ordre
en langage Python qui reçoit en paramètre un dictionnaire et renvoie l'ordre de ce graphe.
Tester votre fonction ordre
en utilisant le graphe de l'exemple introductif, implémenté en langage Python ci-dessus.
Écrire une fonction sommets_adjacents
qui prend en paramètre un dictionnaire ainsi qu'un sommet sous forme de chaîne de caractères et qui renvoie la liste des sommets adjacents à ce sommet entré comme paramètre.
Tester la fonction sommets_adjacents
sur le sommet $A$.
Proposer des préconditions.
Proposer une fonction lister_aretes
qui prend en paramètre un dictionnaire et renvoie la liste des arêtes d'un graphe. Une arête sera représentée par un tuple à deux éléments. ( Attention aux doublons)
Dans un graphe non-orienté, on appelle chaîne une suite d'arêtes consécutives reliant deux sommets (éventuellement confondus).
La longueur d'une chaîne est le nombre d'arêtes qui composent la chaîne.
Une chaîne fermée est une chaîne dont l'origine de la première arête et l'extrémité de la dernière arête sont confondues.
Un cycle est une chaîne fermée dont les arêtes sont distinctes.
Un graphe est dit connexe si deux sommets distincts quelconque peuvent être reliés par une chaîne.
On considère le graphe non-orienté suivant :
Quel est l'ordre du graphe ?
Quel nom peut porter la chaîne $B - C - E - B$ ? Quelle est sa longueur ?
Déterminer une chaîne de longueur 8 reliant $E$ à $A$
Déterminer un cycle d'origine $G$.
Le graphe est-il connexe ?
Proposer un graphe qui n'est pas connexe.
Voici une carte où sont positionnées 6 lieux notés A, B, C, D, E et F dans le centre ville de Vitry-le-François.
On cherche à modéliser les trajets possibles simples permettant de relier directement en voiture ces positions : pour cela on utilise encore un graphe.
Cependant, comme il y a des sens unique, certains trajets ne peuvent se faire que dans un sens. On va donc utiliser des flèches pour modéliser un trajet possible entre deux points. On obtient ainsi le graphe suivant :
Ce type de graphe est appelé un graphe orienté.
Un graphe orienté est un graphe dont les arêtes sont orientées : chaque arête ne peut être parcourue que dans le sens de la flèche.
Ces arêtes orientées sont aussi appelés arc.
Dans un graphe orienté, on appelle chemin de longueur $n$ une succession de $n$ arcs tels que l'extrémité de chacun est l'origine du suivant (sauf pour le dernier arc).
On dit que le chemin est fermé lorsque l'origne du premier arc coïncide avec l'extrémité du dernier.
Un chemin fermé composé d'arcs tous distincts est appelé circuit.
Proxémie des termes suivant l'orientation ou non du graphe :
Graphe non-orienté | Graphe orienté |
---|---|
arête | arc |
chaîne | chemin |
cycle | circuit |
Voici de nouveau le graphe d'introduction :
On peut se rendre du sommet $C$ vers le sommet $E$ mais pas du sommet $E$ vers le sommet $C$ : c'est donc un graphe orienté.
On peut se rendre du sommet $B$ vers le sommet $A$ et du sommet $A$ vers le sommet $B$ : deux arcs sont nécessaires.
À partir du sommet $C$, on peut se rendre au sommet $C$ grâce à un circuit : $ C - B - D - C$.
Le chemin $ A - B - C - E - D - B$ est un chemin de longueur 5.
Le chemin $A - B - D - E - F - A$ est un circuit de ce graphe.
Le graphe suivant représente le plan d’une ville. Les arcs du graphe représentent ses avenues commerçantes, en prenant en compte le sens de circulation, et les sommets du graphe les carrefours de ces avenues.
Est-ce un graphe orienté ou non-orienté ? Pourquoi ?
Quel est l'ordre du graphe ?
Proposer un chemin de longueur 4 d'origine $F$ et d'extrémité $B$.
Proposer un circuit passant par tous les sommets.
networkx
Le but de cette partie est d'étudier le graphe orienté précédent sur Python.
Nous utiliserons la bibliothèque networkx
.
Vous pourrez retrouver l'exercice ci-dessous sous forme de TP jupyter-notebook ici.
Pour implémenter le graphe de l'exercice précédent, il vous suffit de saisir progressivement les instructions suivantes :
Commencer par importer le module networkx
, sous l'alias nx
ici.
Créer un graphe orienté vide avec le script nx.DiGraph()
:
Ajouter au graphe chaque sommet (appelé node
) avec la méthode add_node
:
Ajouter au graphe chaque arc (appelé edge
) avec la méthode add_edges_from
:
Pour ajouter à un graphe non-orienté des arêtes, il suffit d'utiliser la méthode add.edges
au lieu de add.edges_from
.
Pour visualiser le graphe utiliser ce script:
nx.draw(graphe, node_size=800,node_color='blue', edge_color='red',with_labels=True)
plt.show() # pour visualiser le graphique créé
Vous devez voir apparaître une fenêtre contenant une figure proche de celle-ci :
Les flèches correspondent aux traits plus épais de la liaison entre dans deux sommets.
Il est possible d'intégrer séparément toutes les options du tracé du graphique ainsi :
# ensemble des options
options = {
'node_size' : 800, # taille des sommets
'node_color' : 'blue', # couleur de fond des sommets
'edge_color' : 'red', # couleur des arcs
'with_labels' : 'True', # avec le nom des sommets
}
nx.draw(graphe, **options)
plt.show() # pour visualiser le graphique créé
Cela permet entre autre de définir une fois pour toutes les caractéristiques des tracés pour les utiliser pour chacun des graphes : cohérence dans la présentation générale.
Pour des compléments et des précisions sur l'utilisation du module networkx
, vous pouvez consulter :
ou ce tutoriel officiel en anglais.
La bibliothèque networkx
contient aussi différentes méthodes portant sur les graphes, sommets et arcs :
Une documentation complète est disponible à cette adresse.
Utiliser les méthodes et fonctions de la bibliothqèe networkx
pour :
obtenir le degré du sommet 'A'
du graphe de l'exercice précédent.
obtenir le nombre de sommets de ce graphe.
obtenir le nombre d'arcs de ce graphe.
obtenir la liste des sommets voisins au sommet 'D'
de ce graphe.
Tester aussi la méthode successors
avec :
graphe.successors('E')
Tester aussi la méthode predecessors
avec :
graphe.predecessors('E')
On a déjà vu qu'il est possible d'implémenter un graphe à l'aide d'une liste de listes d'adjacence. Une seconde implémentation est possible : avec une matrice d'adjacence. Voici un exemple introductif.
Un journaliste britannique d’une revue consacrée à l’automobile doit tester les autoroutes françaises. Pour remplir sa mission, il décide de louer une voiture et de circuler entre six grandes villes françaises : Bordeaux ($B$),Lyon ($L$), Marseille ($M$), Nantes ($N$), Paris ($P$) et Toulouse($T$). Le réseau autoroutier reliant ces six villes est modélisé par le graphe ci-dessous sur lequel les sommets représentent les villes et les arêtes les liaisons autoroutières entre ces villes.
Plutôt que de représenter la situation par un graphe, le journaliste visualise le réseau avec un tableau dans lequel il met 1 s'il existe une liaison directe entre les deux villes correspondant à la case et 0 sinon. Il obtient donc le tableau ci-dessous :
Villes | $B$ | $L$ | $M$ | $N$ | $P$ | $T$ |
---|---|---|---|---|---|---|
$B$ | 0 | 1 | 0 | 1 | 1 | 1 |
$L$ | 1 | 0 | 1 | 1 | 1 | 1 |
$M$ | 0 | 1 | 0 | 0 | 0 | 1 |
$N$ | 1 | 1 | 0 | 0 | 1 | 0 |
$P$ | 1 | 1 | 0 | 1 | 0 | 1 |
$T$ | 1 | 1 | 1 | 0 | 1 | 0 |
Par exemple, il existe une autoroute reliant directement Paris $P$ à Nantes $N$, donc il y a le nombre 1 dans les cases repérées par $N$ et $P$ ; il n'existe pas d'autoroute reliant directement Marseille $M$ à Bordeaux $B$, donc il y a le nombre 0 dans les cases repérées par $M$ et $B$.
Pour synthétiser l'information (en mémorisant le fait que les villes sont rangées dans l'ordre alphabétique), il suffit de considérer le tableau extrait contenant les données chiffrées. On peut appeler ce tableau matrice. Voici la matrice représentant la situation :
$$G = \begin{pmatrix} 0 &1 &0 &1 &1 &1 \\ 1 &0 &1 &1 &1 &1\\ 0 &1 &0 &0 &0 &1\\ 1 &1 &0 &0 &1 &0 \\ 1 &1 &0 &1 &0 &1\\ 1 &1 &1 &0 &1 &0 \end{pmatrix} $$La matrice associée à un graphe d'ordre $n$ est la matrice carrée de taille $n$, où le terme de la $i$-ème ligne et de la $j$-ème colonne est égal au nombre d'arêtes (ou d'arc) partant du sommet $i$ pour arriver au sommet $j$.
Cette matrice s'appelle la matrice d'adjacence de ce graphe.
Un graphe orienté a aussi une matrice d'adjacence.
Le graphe ci-dessous représente, dans un aéroport donné, toutes les voies empruntées par les avions au roulage. Ces voies, sur lesquelles circulent les avions avant ou après atterrissage, sont appelées taxiways. Les sommets du graphe sont les intersections. Les arcs du graphe représentent les voies de circulation (les « taxiways ») en prenant en compte le sens de circulation pour les avions dans les différentes voies ainsi que le temps de parcours pour chacune en minute(s).
Ici, on ne prend pas en compte ici les distances, mais seulement l'existence ou non d'un arc partant d'un sommet et aboutissant à un autre.
Dans la matrice d'adjacence pour un graphe orienté :
Chaque ligne correspond à un sommet de départ,
chaque colonne correspond à un sommet d'arrivée,
un 1 au niveau du terme de la ligne i et de la colonne j signfie l'existence d'un arc qui part du sommet correspondant à la ligne i et qui pointe vers le sommet correspondant à la colonne j,
un 0 au niveau du terme de la ligne i et de la colonne j signfie l'absence d'un arc qui part du sommet correspondant à la ligne i et qui pointe vers le sommet correspondant à la colonne j.
Pour simplifier, les sommets sont rangés par ordre croissant, on a donc :
Ainsi, on a par exemple :
Il y une liaison directe de $A$ vers $B$, donc le deuxième coefficient ($2^{ème}$ car l'arrivée $B$ est le deuxième sommet) de la première ligne (celle du départ $A$) vaut 1.
Il n'y a pas de liaison directe de $C$ vers $A$, donc le premier coefficient (colonne correspond à l'arrivée $A$) de la troisième ligne (celle du départ $C$) est 0.
Ainsi, la matrice $M$ d'ajacence du graphe de cet exemple est
$$M = \begin{pmatrix} 0 & 1 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 1 & 0 & 0 \\ 0 & 1 & 0 & 1 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 1 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ \end{pmatrix}$$Le graphe suivant représente le plan d’une ville. Les arcs du graphe représentent ses avenues commerçantes, en prenant en compte le sens de circulation, et les sommets du graphe les carrefours de ces avenues.
Écrire la matrice $M$ associée à ce graphe. (On rangera les sommets dans l’ordre alphabétique).
Cette matrice est-elle symétrique (par rapport à la diagonale descendante) ? Pourquoi ceci était-il prévisible ?
D'un graphe vers matrice en langage Python.
On reprend l'exercice précédent :
Le graphe suivant représente le plan d’une ville. Les arcs du graphe représentent ses avenues commerçantes, en prenant en compte le sens de circulation, et les sommets du graphe les carrefours de ces avenues.
En vous aidant du travail déjà effectué lors de l' exercice 10, implémenter en Python le graphe orienté ci-dessus.
Voici un programme à rajouter à la suite du programme précédent ; l'objectif est que la matrice M
corresponde à la fin à la matrice d'adjacence du graphe :
liste = ['A','B','C','D','E','F']
n = len(liste)
M = [[0]*n for i in range(n)]
for i in range(n):
for j in range(n):
......................
M[i][j] = 1
Que permet le ligne M = [[0]*n for i in range(n)]
?
compléter le programme en remplaçant la ligne ............... par un script qui permet d'avoir la matrice d'adjacence stockée dans M
.
Le module networkx
contient aussi une fonction permettant d'obtenir la matrice d'adjacence : adjacency_matrix
.
Cependant, Le type de données de cette matrice obtenue avec M = adjacency_matrix(graphe)
peut être vu comme une sorte de dictionnaire de dictionnaires, où la clé est un couple de nombres, nombres correspondant
à des deux sommets définissant un arc et où la valeur correspond au nombre d'arcs reliant ces deux sommets.
Or, les nombres des couples des clés ne correspondent pas forcément aux mêmes sommets lors de deux exécutions identiques.
Ainsi, nous n'utiliserons pas cette méthode ensemble.
Dans cet exercice, vous allez construire un graphe à partir d'une matrice d'adjacence.
Une matrice, étant une sorte de tableau à deux dimensions, peut être implémentée en langage Python sous la forme d'une liste de listes.
On considère la matrice d'adjacence suivante :
$$\begin{pmatrix} 0 & 1 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 1 & 0 & 0 & 0 & 0 \\ 1 & 0 & 0 & 0 & 1 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 \\ 0 & 1 & 0 & 0 & 1 & 1 & 0 & 0 \\ 1 & 0 & 1 & 0 & 0 & 0 & 1 & 0 \\ \end{pmatrix}$$Implémenter cette matrice en exécutant le code suivant
import networkx as nx #import de cette bibliothèque gérant les graphes
# importer aussi la bibliothèque suivante afin de représentaer graphiquement le graphe :
import matplotlib.pyplot as plt
# matrice d'adjacence :
M = [[0, 1, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 0, 0, 0],
[0, 1, 0, 1, 0, 0, 0, 0],
[1, 0, 0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 1, 1],
[0, 1, 0, 0, 1, 1, 0, 0],
[1, 0, 1, 0, 0, 0, 1, 0]]
Cette matrice représente les liens d'amitié dans un réseau social de 8 personnes : Ada, Bryan, Carla, Duc, Elie, Felix, Grace, Hector. (l'ordre alphabétique permet de retrouver l'ordre d'apparition dans la matrice d'ajacence.)
Explications :
Le fait que M[0][1]=1
signifie Qu'Ada considère Bryan comme un ami ; le fait que M[2][0]=0
signifie Que Carla ne considère pas Ada comme un amie .
Proposer une fonction creer_graphe
qui prend en paramètre une matrice d'ajacence et une liste de noms et qui renvoie le graphe associé à cette matrice.
Tester la fonction avec la matrice précédente.
Représenter graphiquement le graphe du réseau social des 8 personnes mentionnées ci-dessous dont est donnée la matrice d'adjacence.
N'hésitez pas à reprendre une partie des codes déjà utilisés afin de gérer le tracé.
Vous devez obtenir un graphique proche de celui-ci :
Dans de nombreux problème concret, il peut être utile de rajouter une information chiffrée au niveau des arcs ou des arêtes d'un graphe.
Reprenons l'exemple historique des ponts de Königsberg.
Nous avons vu dans l'exemple introductif historique que le problème concret peut être modélisé par le graphe suivant :
On peut modifier ce graphe en ne prenant en compte que le nombre de trajets simples permet de relier deux lieux, on a alors :
À ce graphe pondéré, on peut associer la matrice suivante :
$$\begin{pmatrix} 0 & 2 & 2 & 1 \\ 2 & 0 & 0 & 1 \\ 2 & 0 & 0 & 1 \\ 1 & 1 & 1 & 0 \\ \end{pmatrix}$$On peut modifier le graphe en prenant en compte la distance la plus courte pour relier deux lieux correspondant à des sommets adjacents (le 0 signifiant ici que l'arête n'existe pas). On a alors :
À ce graphe pondéré, on peut associer la matrice suivante :
$$\begin{pmatrix} 0 & 2 & 1 & 1.5 \\ 2 & 0 & 0 & 3 \\ 2 & 0 & 0 & 2 \\ 1.5 & 3 & 2 & 0 \\ \end{pmatrix}$$On peut modifier le graphe en prenant en compte le temps minimum , en minutes, pour relier deux lieux correspondant à des sommets adjacents (le 0 signifiant ici que l'arête n'existe pas). On a alors :
À ce dernier graphe pondéré, on peut associer la matrice suivante :
$$\begin{pmatrix} 0 & 14 & 10 & 17 \\ 14 & 0 & 0 & 25 \\ 10 & 0 & 0 & 21 \\ 17 & 25 & 21 & 0 \\ \end{pmatrix}$$Dans le chapitre sur les algorithmes sur les graphes, l'absence d'un arc entre deux sommets conduira à mettre comme coefficient $\infty$ plutôt que 0.
On appelle graphe pondéré
tout graphe dans lequel chaque arête d'un (ou arc) est affectée nombre réel positif appelé poids de cet arête (ou de cet arc).Le graphe ci-dessous représente, dans un aéroport donné, toutes les voies empruntées par les avions au roulage. Ces voies, sur lesquelles circulent les avions avant ou après atterrissage, sont appelées taxiways. Les sommets du graphe sont les intersections. Les arcs du graphe représentent les voies de circulation (les « taxiways ») en prenant en compte le sens de circulation pour les avions dans les différentes voies ainsi que le temps de parcours pour chacune en minute(s).
En rangeant les sommets par ordre alphabétique, déterminer la matrice associée à ce graphe orienté pondéré.
Implémenter cette matrice en Python en tant que tableau de tableaux.
On considère un réseau électrique reliant 5 villes appelées "Lorin", "Magis", "Nolin", "Outa" et "Permi".
Les distances du réseau électrique reliant ces villes est donné par la matrice d'adjance suivante :
$$\begin{pmatrix} 0 & 30& 0 & 35 & 0 \\ 30 & 0 & 97 & 0 & 45 \\ 0 & 97 & 0 & 51 & 59 \\ 35 & 0 & 51 & 0 & 40 \\ 0 & 45 & 59 & 40 & 0 \\ \end{pmatrix}$$L'objectif est de pouvoir implémenter le graphe pondéré associé à ce type de matrice d'adjacence où les termes sont les poids.
Proposer une fonction matrice_vers_liste
qui :
prend comme premier paramètre matrice
une matrice d'adjacence de type d'un tableau de tableaux, matrice qui contient les poids du graphe pondéré,
prend comme second paramètre noms
une liste de chaînes de caractères qui correspond aux noms des sommets, sommets appraissant dans l'ordre de la matrice,
renvoie un dictionnaire dont les clés sont les sommets et les valeurs sont une liste de tuples au format ("nom_sommet",poids)
Utiliser cette fonction matrice_vers_liste
pour créer le graphe pondéré associé à la matrice d'adjacence donnée au début de l'exercice.
Obtenir une représentation graphique de ce graphe.
idée venant de Nathalie Daval : accès au document ayant donné l'idée.
Profitant de vacances, vous partez à la Réunion pour oublier l'informatique.
Mais à peine arrivé.e.s à l'aéroport de Saint-Denis de la Réunion, vous voilà coincé.e.s dans un bouchon.
Par chance, le conducteur vous donne des informations sur le temps pour parcourir le trajets entre différents lieux de la ville.
Grâce aux compétences acquises en NSI, vous avez traduit les informations données par le conducteur par ce graphe pondéré :
Dans ce plan, pour simplifier les notations suivantes ont été prises : M correspondant à La Montagne, H pour Hôpital, C pour Cimetière, U pour Université, A pour Aéroport et R pour Rivière des pluies.
Implémenter le graphe pondéré sous forme d'un dictionnaire où les clés sont les sommets et les valeurs sont une liste de tuples au format ("sommets",temps)
Proposer une fonction dict_vers_matrice
qui :
prend comme paramètre graphe
un dictionnaire où les clés sont les sommets et les valeurs sont une liste de tuples au format ("sommets",temps),
renvoie un tuple constitué de la matrice d'adjacence associée au graphe pondéré et de la liste des sommets du graphe.
Pour revoir une explication complète sur les graphes et le vocabulaire, vous vouvez visionner la vidéo accessible ici.
Vous pouvez vous rendre dans l'espace python1 pour voir les exemples de programmes proposés :
L'idée ici pour obtenir une approximation de pi est de créer des points au hasard dans un carré de coté 2 et de compter ceux qui se trouvent dans un disque de rayon 1 inscrit dans le carré.
Pour cela on peut utiliser l'instruction random qui renvoie un nombre aléatoire entre 0 et 1. (Shift Entrée pour exécuter les blocs de code
A l'aide de la random() du module random écrire une fonction pointAleatoire()
renvoyant les coordonnées d'un point aléatoires et dans l'intervalle [-1;1].
Créer une fonction estDansLeDisque(xA,yA)
renvoyant un booleen : True si le point A est dans le disque unité et False sinon.
Ecrire une fonction compteurAffiche(n)
qui renvoie le nombre de points du disque unité parmis n points lancés aléatoirement dans le carré et qui affiche les points dans le disque.
Ecrire une fonction demo()
qui demande à l'utilisateur le nombre de points voulu pour l'approximation, qui affiche l'approximation obtenue ainsi que le nombre de points dans le disque et qui affiche l'ensemble des points dans le disque. On pourra ajouter le tracé du cercle et du carré avec le module numpy.
Une autre façon d'obtenir une approximation de $\pi$ est de considérer le quart du disque unité et de le découper en rectangle et d'ajouter la surface de chaque rection pour obtenir une approximation de $\pi$.
Ecrire une fonction pi_rect(n)
qui renvoie une approximation de $\pi$ à partir de n rectangles et qui affiche une représentation du quart de cercle et des rectangles.
On considère les suites $(x_n)$ et $(y_n)$ définies par $x_0=1$, $y_0=8$ et pour tout entier naturel $n$ :
$$\left \{ \begin{array}{l} x_{n+1} = \frac73x_n+\frac13y_n+1 \\ y_{n+1} = \frac{20}3x_n+\frac83y_n+5 \\ \end{array} \right. $$
Ecrire une fonction suites(n)
qui affiche une liste des couples $(x_i;y_i)$ pour $i\leq n$ et qui propose une représentation de ces points.
Voici un exemple d'exercice proposé aux élèves de l'option mathématiques expertes.
$(0 ; \vec{u},\vec{v})$ est un repère orthonormé direct du plan complexes.
Pour la figure, on pendra pour unité 5 cm.
On considère la suite $(z_n)$ définie par $\left\{ \begin{array}{l} z_0=0\\ z_{n+1}=\dfrac{1}{2}(1+i) z_n-1+i \textrm{, pour tout } n\in\mathbb{N} \end{array} \right.$
Pour tout entier naturel $n$, on note $M_n$ le point du plan complexe qui a pour affixe $z_n$
Déterminer la forme algébrique de $z_1$ , $z_2$, $z_3$ et $z_4$.
Placer, dans le plan complexe, les points $M_0$, $M_1$ , $M_2$, $M_3$ et $M_4$.
Voici une fonction Suite_1 écrite dans le langage Python.
from cmath import *
def Suite_1(n):
z=0
for i in range(1,n+1):
z=(1+1j)/2*z-1+1j
return z
cmath
pour travailler avec les nombres
complexes.
Les complexes se notent : 1+1j, 3j, -1+0j, ...
Placer, dans le plan complexe, les points $M_5$, $M_6$ , $M_7$ et $M_8$.
Ecrire l'expression de $Z_{n+1}$ et mettre $1+i$ en facteur.
Exécuter ce programme pour des paramètres de la forme $4k$ et $4k+2$.
Fluctuation des fréquences de succès. Animation tirée de l'espace Eduscol.
Ressources n°8 d'Eduscol
Faire des regressions linéaires en STS en utilisant python.
Le fichier jupyter à télécharger iciUn ensemble d'exemples utilisant la biblithèque networkx.
Le fichier jupyter à télécharger iciVous pouvez utiliser la bibliothèque SimPy
pour faire du calcul formel.
Vous avez un tutoriel de la bibliothèque avec une console pour faire vos tests : Accès direct
Vous pouvez retrouver également dans le jupyter cidessous quelques exemples :
Le fichier jupyter à télécharger iciCet exemple utilise un utilitaire de représentation des graphes qui s'appelle grahviz.
Une vidéo pour l'utilisation de cet utilitaire :
Le fichier jupyter à télécharger ici Le fichier dirmaths à télécharger iciIl y a (pour l'instant) 13 ressources sur le site eduscol : accès direct
Vous pouvez lire ici le préambul de ces ressources :
Sur le site FranceIOI, vous avez la possibilité de créer un groupe et demander aux élèves de s'inscrire à ce parcours.
Vous pourrez visualiser l'avancée des élèves.
Site france IOIQuelques impressions écrans du site.
En attendant un jupyter hub, vous pouvez tester cette application. Il faut créer des comptes pour vos élèves (c'est assez simple à faire) et ensuite créer une activité (Par exemple python, scratch, géogébra, etc) que vous pouvez suivre.
Accès directUne vidéo de présentation :
Le lien vers le document : Accès au document