Deux que j'ai eu beaucoup de plaisir à faire étaient Question 59 qui consistait à craquer un morceau de texte (faiblement) crypté et Question 96 qui était un résolveur de sudoku.
Je dois cependant admettre que ce sont des questions qui intéressent probablement davantage les programmeurs ayant des connaissances plus faibles en mathématiques (comme moi).
Problème 59
Chaque caractère d'un ordinateur se voit attribuer un code unique et la norme privilégiée est l'ASCII (American Standard Code for Information Interchange). Par exemple, uppercase A = 65
, asterisk (*) = 42
y lowercase k = 107
.
Une méthode de cryptage moderne consiste à prendre un fichier texte, à convertir les octets en ASCII, puis à faire un XOR de chaque octet avec une valeur donnée, tirée d'une clé secrète. L'avantage de la fonction XOR est que l'utilisation de la même clé de cryptage sur le texte chiffré permet de restaurer le texte en clair ; par exemple, 65 XOR 42 = 107
entonces 107 XOR 42 = 65
.
Pour un cryptage inviolable, la clé est de la même longueur que le message en clair, et la clé est constituée d'octets aléatoires. L'utilisateur conserve le message crypté et la clé de cryptage à des endroits différents. Sans les deux "moitiés", il est impossible de décrypter le message.
Malheureusement, cette méthode n'est pas pratique pour la plupart des utilisateurs. La méthode modifiée consiste donc à utiliser un mot de passe comme clé. Si le mot de passe est plus court que le message, ce qui est probable, la clé est répétée de manière cyclique dans le message. L'équilibre de cette méthode consiste à utiliser une clé de mot de passe suffisamment longue pour assurer la sécurité, mais suffisamment courte pour être mémorable.
Votre tâche a été facilitée, car la clé de cryptage se compose de trois caractères minuscules. Utilisation de cipher1.txt (clic droit et "Enregistrer le lien/la cible sous..."), un fichier contenant les codes ASCII cryptés, et sachant que le texte en clair doit contenir des mots anglais courants, décryptez le message et trouvez la somme des valeurs ASCII du texte original.
Problème 96
Su Doku (qui signifie en japonais "lieu des nombres") est le nom donné à un concept de puzzle populaire. Son origine n'est pas claire, mais il faut en attribuer le mérite à Leonhard Euler, qui a inventé une idée de casse-tête similaire, et beaucoup plus difficile, appelée les carrés latins. L'objectif des puzzles Su Doku, cependant, est de remplacer les blancs (ou zéros) dans une grille de 9 par 9 de telle sorte que chaque ligne, colonne et case de 3 par 3 contienne chacun des chiffres de 1 à 9. Vous trouverez ci-dessous un exemple d'une grille de départ typique et de sa grille de solution.
0 0 3 0 2 0 6 0 0 4 8 3 9 2 1 6 5 7
9 0 0 3 0 5 0 0 1 9 6 7 3 4 5 8 2 1
0 0 1 8 0 6 4 0 0 2 5 1 8 7 6 4 9 3
0 0 8 1 0 2 9 0 0 5 4 8 1 3 2 9 7 6
7 0 0 0 0 0 0 0 8 7 2 9 5 6 4 1 3 8
0 0 6 7 0 8 2 0 0 1 3 6 7 9 8 2 4 5
0 0 2 6 0 9 5 0 0 3 7 2 6 8 9 5 1 4
8 0 0 2 0 3 0 0 9 8 1 4 2 5 3 7 6 9
0 0 5 0 1 0 3 0 0 6 9 5 4 1 7 3 8 2
Une énigme Su Doku bien construite a une solution unique et peut être résolue par la logique, bien qu'il puisse être nécessaire d'employer des méthodes de "devinette et test" afin d'éliminer des options (les avis sont très partagés à ce sujet). La complexité de la recherche détermine la difficulté de l'énigme ; l'exemple ci-dessus est considéré comme facile car il peut être résolu par déduction directe.
Le fichier texte de 6K, sudoku.txt (cliquez avec le bouton droit de la souris et sélectionnez "Enregistrer le lien/la cible sous..."), contient cinquante puzzles Su Doku différents, dont la difficulté varie, mais dont les solutions sont toutes uniques (le premier puzzle du fichier est l'exemple ci-dessus).
En résolvant les cinquante énigmes, trouvez la somme des nombres à 3 chiffres trouvés dans le coin supérieur gauche de chaque grille de solution ; par exemple, 483 est le nombre à 3 chiffres trouvé dans le coin supérieur gauche de la grille de solution ci-dessus.