diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/README.md b/README.md index 476e423..4e3433b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Exercices ludiques en python + Vous trouverez ici un ensemble d'exercices permettant de pratiquer python mais également découvrir quelques pans annexes de l'informatique en général. +Ces exercices sont issus d'un livre réalisé par Pascal Lafourcade et Malika More. ## Exercice : A ski Décryptez le message stocké dans le fichier `files/a_ski.txt`. @@ -9,7 +11,7 @@ Après avoir compris la technique de codage utilisé, saurez-vous implémenter u > Ici vous allez découvrir la manipulation de fichiers, la conversion de str en int et quelques méthodes natives du langage python. ## Exercice cryptarithme -Chaque lettre de l'opération représente un chiffre différent entre 0 et 9. Ecrivez un programme permettant de déterminer la valeur de chaque lettre pour que l'opération soit corecte ,sachant que le premier chiffre dechaque nombre ne peut être un `0`. +Chaque lettre de l'opération représente un chiffre différent entre 0 et 9. Ecrivez un programme permettant de déterminer la valeur de chaque lettre pour que l'opération soit correcte, sachant que le premier chiffre de chaque nombre ne peut être un `0`. > SEND + MORE = MONEY > HUIT + HUIT = SEIZE @@ -18,8 +20,52 @@ Chaque lettre de l'opération représente un chiffre différent entre 0 et 9. Ec > CINQ + CINQ + VINGT = TRENTE -Saure-vous implémenter un script python permettant de trouver les chiffres associés aux lettres? +Saurez-vous implémenter un script python permettant de trouver les chiffres associés aux lettres? Vous avez le fichier `files/cryptarithme.txt` à votre disposition si vous le souhaitez. -> Cet exercice implique l'utilisation de boucles imbriquées. \ No newline at end of file +> Cet exercice implique l'utilisation de boucles imbriquées. + +## Exercice: Compter comme un shadok +> Pour compte les matins, les Shadoks ont un système de numérotation basé uniquement sur les syllabes suivantes : +>GA, BU, ZO et MEU. +>Voici par exemple un nombre shadok : BU MEU ZO MEU GA GA + +Saurez-vous programmer un convertisseur de nombre shadoks en nombres décimaux pour découvrir quel est le nombre caché derrière le fichier `files/shadoks.txt` et ainsi découvrir la date de diffusion du premier épisode de cette série culte? + +> Cet exercice implique la compréhension des bases en mathématiques. + +## Exercice : Stéganographie +Le principe de stéganographie est d'utiliser une technique pour passer un message secret d'une manière dissimulée tout en restant lisible pour celui qui sait comment trouver. +Au sein du fichier `stegano.png` se cache un texte secret. Chaque pixel a été très légèremet modifié. +Il faut extraire le bit de poids faible de chaque couleur de chaque pixel. +Puis d'en refaire des octets de 8 bits. + +Exemple: +```python +pixel = image[0][0] +r = red(pixel) % 2 +g = green(pixel) % 2 +b = blue(pixel) % 2 +a = alpha(pixel) % 2 + +pixel1 = image[1][0] +r1 = red(pixel1) % 2 +g1 = green(pixel1) % 2 +b1 = blue(pixel1) % 2 +a1 = alpha(pixel1) % 2 + +first_letter = chr(bin2dec(''.join((r,g,b,a,r1,g1,b1,a1)))) +``` +Vous aurez très probablement besoin d'utiliser PIL. +```shell +pip install pillow +``` + +## Exercice : Canaux cachés +La fonction fournie dans le fichier `files/canaux_caches.py` permets de vérifier si +un code saisi est contenu dans la variable essai + +Saurez-vous écrire un programme qui permets à votre ordinateur à coup sûr en moins de 3 minutes de découvrir le code PIN saisi par l'utilisateur ? +L'ordinateur ne doit pas utiliser la variable pin mais uniquement la méthode checkpin. +La fonction checkpin fournie ne dois pas être modifiée. \ No newline at end of file diff --git a/files/canaux_caches.py b/files/canaux_caches.py new file mode 100755 index 0000000..642d947 --- /dev/null +++ b/files/canaux_caches.py @@ -0,0 +1,12 @@ +import time + +global pin + +def checkpin(essai): + for i in range(len(pin)): + time.sleep(1) + if pin[i]!= essai[i]: + return(False) + return(True) + +pin=input("Entrez un code PIN constitué de 6 chiffres entre 0 et 9 que l'ordinateur doit deviner : ") \ No newline at end of file diff --git a/files/shadoks.txt b/files/shadoks.txt new file mode 100755 index 0000000..431677f --- /dev/null +++ b/files/shadoks.txt @@ -0,0 +1 @@ +BU MEU ZO MEU GA GA diff --git a/files/stegano.png b/files/stegano.png new file mode 100755 index 0000000..cd60a44 Binary files /dev/null and b/files/stegano.png differ