Exercices
Exercice 1
Résolvez le Pydéfi proposé à cette adresse
Vous pouvez vous créer un compte pour valider vos résultats, ce site (géré par l'Académie de Poitiers) est remarquable.
Exercice 2
On donne la liste jours
suivante :
jours = ["lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"]
On rappelle que la fonction len
permet d'obtenir le nombre de caractères d'une chaine de caractères :
>>> len("test")
4
Q1. Créer en compréhension une liste lst1
contenant uniquement les jours comportant 5 lettres.
Correction
lst1 = [day for day in jours if len(day) == 5]
Q2. Créer en compréhension une liste lst2
contenant uniquement les jours comportant la lettre a
dans leur nom.
Correction
lst2 = [day for day in jours if 'a' in day]
Q3a. Créer une fonction compte_e
qui prend en paramètre une chaine de caractères et qui renvoie le nombre de e
que contient cette chaine de caractères.
Correction
1 2 3 4 5 6 |
|
Q3b. Créer en compréhension une liste lst4
contenant uniquement les jours comportant deux fois la lettre e
dans leur nom.
Correction
lst4 = [day for day in jours if compte_e(day) == 2]
Exercice 3
On donne le tableau m
suivant :
1 2 3 4 5 6 7 8 9 10 11 12 |
|
- si le nombre est divisible par 7, afficher
*
, sinon afficher une espace - sur une même ligne, on affichera tous les symboles côte à côte, en rajoutant le paramètre
end = ''
à la fonctionprint
. (exemple :print('*', end = '')
) - on ira à la ligne à la fin de chaque ligne, par l'instruction
print()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Exercice 4
Pydéfi Insaisissable matrice (version originale à cette adresse)
On considère la matrice suivante :
-------------------------------
| 17 | 3 | 4 | 14 | 5 | 17 |
-------------------------------
| 8 | 16 | 3 | 17 | 14 | 12 |
-------------------------------
| 13 | 5 | 15 | 4 | 16 | 3 |
-------------------------------
| 14 | 7 | 3 | 16 | 3 | 2 |
-------------------------------
| 6 | 1 | 16 | 10 | 5 | 13 |
-------------------------------
| 11 | 1 | 9 | 11 | 18 | 8 |
-------------------------------
M = [[17, 3, 4, 14, 5, 17], [8, 16, 3, 17, 14, 12], [13, 5, 15, 4, 16, 3], [14, 7, 3, 16, 3, 2], [6, 1, 16, 10, 5, 13], [11, 1, 9, 11, 18, 8]]
Cette matrice va évoluer au cours du temps, et le contenu k
d'une case est transformé, à chaque étape en (9*k + 3) % 19
.
Rappelons que a % b
donne le reste de la division entière de a
par b
.
À chaque étape de calcul, tous les nombres de la matrice sont simultanément modifiés. L'entrée du problème est le nombre d'étapes à appliquer (ici : 39). Vous devez répondre en donnant la somme des valeurs contenues dans la matrice après application de toutes les étapes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Exercice 5
D'après Advent Of Code 2021, day02
Un sous-marin peut se déplacer horizontalement (toujours vers la droite) grâce à l'instruction forward
suivie d'un nombre.
Il peut aussi monter ou descendre, grâce aux instructions up
ou down
, elles aussi suivies d'un nombre.
Un grand nombre d'instructions successives sont données. Le but de l'exercice est de trouver le produit final de l'abscisse du sous-marin et de sa profondeur.
Exemple :
forward 5
down 5
forward 8
up 3
down 8
forward 2
Après ces déplacements, le sous-marin se trouve à l'abscisse 15 et à la profondeur 10. La réponse à l'énigme serait donc 150.
-
Téléchargez le fichier input.txt. Votre fichier
.py
de travail doit se situer dans le même répertoire que le fichierinput.txt
.
Parsing des données
Parser des données consiste à les récupérer et les rendre exploitables. C'est quelque chose de souvent pénible (dans les énigmes de code ET dans la vraie vie). Pourtant de la qualité du parsing (et surtout de la structure de stockage choisie) va dépendre la difficulté (ou non) de l'exploitation des données.
Proposition de parsing :
1 2 3 |
|
Exécutez ce code et observez ce que contient la liste lst
.
Résolution de l'énigme
À la fin de toutes ses manœuvres, quel est le produit de l'abscisse du sous-marin et de sa profondeur ?
data_raw = open('input.txt').read().splitlines()
lst_raw = [d.split(' ') for d in data_raw]
lst = [[l[0], int(l[1])] for l in lst_raw]
x = 0
y = 0
for couple in lst:
direction = couple[0]
valeur = couple[1]
if direction == 'forward':
x += valeur
if direction == 'down':
y += valeur
if direction == 'up':
y -= valeur
print(x*y)
La réponse est donc 1746616.