Exercices supplémentaires⚓︎
Fiches d'exercices sur Capytale
-
Fiche d'exercices 1 ou code de partage :
b154-1046119
. -
Fiche d'exercices 2 ou code de partage :
5d12-1084132
. -
Fiche d'exercices 3 ou code de partage :
a8b4-1629612
.
La majorité des exercices proposés sont issus du site https://pydefis.callicode.fr qui recense tous les défis des différentes éditions du concours c0d1ng UP
.
L'affiche au format PDF , plus pratique pour déchiffrer le message caché ...
Vous pouvez vous y créer un compte, pour valider les défis et progresser au Hall of Fame... mais ce n'est absolument pas obligé.
Désamorçage d'un explosif (I)
Le découpage de nombres selon un certain nombre de chiffres est quelque chose de courant en programmation.
Pour cela, l'astuce réside en l'utilisation de la division euclidienne, par la bonne puissance de 10.
Par exemple, si on veut récupérer le chiffre des unités d'un nombre, il suffit de prendre le reste de la division euclidienne (opérateur %
en Python) du nombre par 10. Les autres chiffres seront donnés par le quotient (opérateur //
en Python).
>>> 3748 % 10
8
>>> 3748 // 10
374
Pour les deux derniers chiffres, on effectuera une division euclidienne par 100, pour les trois derniers par 1000, etc.
>>> entree = 317010
>>> entree % 1000
10
>>> entree // 1000
317
SW IV : Il a mis son mot de passe sur un post-it !
Encore la division euclidienne...
Toc Boum
Utiliser la «brute-force» (il s'agit de tester, une à une, toutes les combinaisons possibles...) !
Où l'on affiche tous les couples possibles, et on trouve le bon en les passant en revue «à la main».
On va mémoriser le meilleur couple, c'est-à-dire celui dont la différence est la plus petite. J'appelle best_a
et best_b
ces deux valeurs, que j'initialise à des valeurs volontairement éloignées.
Puis à chaque couple trouvé (comme dans la version basique), je compare la différence des deux nombres à celle des meilleurs. Si elle est plus petite, je remplace par les nouvelles valeurs de a
et de b
Pour faire la différence entre deux valeurs, peu importe le signe: on utilisera la valeur absolue, abs
en Python.
Le message pour Queulorior
https://pydefis.callicode.fr/defis/Queulorior/txt
En utilisant pygame
.
Rappel du code minimal pour Pygame | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
Pour résoudre ce pydéfi, il va valloir tracer un segment pour chaque pas en direction de N, S, O, E. Commençons par choisir une taille pour chaque pas, par exemple 10 pixels:
pas = 10
Ensuite il faut savoir tracer un segment
pygame.draw.line(fenetre, [0, 0, 0], [0, 0], [50, 30], 2)
L'instruction précédente trace un segment (a line) d'épaisseur 2
pixels, en noir ([0, 0, 0]
) entre les points de coordonnées [0, 0]
et [50, 30]
.
Enfin il faut modéliser correctement le problème, c'est-à-dire identifier les grandeurs dont on va avoir besoin et avec quels types de variables on va les représenter...
On a besoin à chaque étape:
- d'un point de départ et d'un point d'arrivée (se rappeler de l'exercice 2.2 de la série 3 avec pygame ici) dont il faut calculer les coordonnées en fonction de la lettre lue (N, S, E, O);
- d'un déplacement entre les deux, c'est-à-dire tracer une ligne.
Cerbère
Brute-forcez: tester toutes les longueurs entières possibles...
SW I: à l'assaut de Gunray
Utilisez des accumulateurs.
Les pouvoirs psychiques de Psystigri