vendredi 10 avril 2015

Résoudre l'énigme "TOI+MOI+LUI=NOUS" .... en langage C

Il s'agit d'une petite énigme que les enfants s'échangent à la court de récréation (seulement les plus geek). L'énoncé est simple:

Il faut trouver les chiffres correspondant à chaque lettre de l'équation "MOI+TOI+LUI=NOUS", en faisant correspondre une et une seule lettre à chacune de ces huit lettre composant cette équation.

Par dépit vis à vis de ma fille qui m'a mis au défis, j'ai tenté de résoudre le code (cad la correspondance entre les lettres et les chiffres), en utilisant un outil informatique. J'avoue avoir perdu une bonne heure avec Excel, avant de m'apercevoir que le nombre de permutation (cad le nombre de possibilité de code différent à tester) était supérieur au million, ce qui dépasse le raisonnable dans une simple feuille de tableur.

J'ai donc refait l'exercice en langage C, pour tester une à une (de manière récursive pour le plaisir) chacune des près de 2 millions de possibilités. Pour rappel, les permutations possibles de codes différents pour résoudre l'équation se calcule comme cela: 10 x 9 x 8 x 7 x 6 x 5 x 4 x 3 (10 chiffres à répartir parmis 8 lettres, dans tous les ordres possibles). Mon erreur de débutant fut au début de confondre les combinaisons et les permutations (c'est évident après coup, et encore plus après avoir perdu une heure sur cette erreur). Pour rappel, les combinaisons de 8 chiffres parmi 10 sont seulement de 45.


Pour ceux que cela intéresse, le code est en pièce jointe, avec les fichiers de compilation sous linux.
Le résultat des courses: il existe 216 solutions à cette équation. Pour finir, je me suis amusé à étudier les combinaisons les plus prolixes parmi les 45 possibles, cette fois avec un tableur, en quelques minutes. Cela donne 18 solutions pour une seule combinaison de chiffres. Et le chiffre le plus représenté parmi les 216 solutions de code est le "1" (204 fois sur 216 tout de même). Je l'aurais parié. Mais c'est encore mieux de le prouver par la démonstration, avec un compilateur C et un tableur.

Parfaitement inutile, donc totalement indispensable.


0 1 2 3 4 5 6 7 8 9
nb de solution 216
1 1 1 1 1 1 1 1 0 0 1111111100 6
1 1 1 1 1 1 1 0 1 0 1111111010 0
1 1 1 1 1 1 0 1 1 0 1111110110 6
1 1 1 1 1 0 1 1 1 0 1111101110 0
1 1 1 1 0 1 1 1 1 0 1111011110 6
1 1 1 0 1 1 1 1 1 0 1110111110 0
1 1 0 1 1 1 1 1 1 0 1101111110 0
1 0 1 1 1 1 1 1 1 0 1011111110 0
0 1 1 1 1 1 1 1 1 0 0111111110 6
1 1 1 1 1 1 1 0 0 1 1111111001 6
1 1 1 1 1 1 0 1 0 1 1111110101 6
1 1 1 1 1 0 1 1 0 1 1111101101 6
1 1 1 1 0 1 1 1 0 1 1111011101 6
1 1 1 0 1 1 1 1 0 1 1110111101 6
1 1 0 1 1 1 1 1 0 1 1101111101 0
1 0 1 1 1 1 1 1 0 1 1011111101 0
0 1 1 1 1 1 1 1 0 1 0111111101 12
1 1 1 1 1 1 0 0 1 1 1111110011 6
1 1 1 1 1 0 1 0 1 1 1111101011 0
1 1 1 1 0 1 1 0 1 1 1111011011 12
1 1 1 0 1 1 1 0 1 1 1110111011 0
1 1 0 1 1 1 1 0 1 1 1101111011 6
1 0 1 1 1 1 1 0 1 1 1011111011 0
0 1 1 1 1 1 1 0 1 1 0111111011 6
1 1 1 1 1 0 0 1 1 1 1111100111 12
1 1 1 1 0 1 0 1 1 1 1111010111 18
1 1 1 0 1 1 0 1 1 1 1110110111 6
1 1 0 1 1 1 0 1 1 1 1101110111 6
1 0 1 1 1 1 0 1 1 1 1011110111 6
0 1 1 1 1 1 0 1 1 1 0111110111 18
1 1 1 1 0 0 1 1 1 1 1111001111 0
1 1 1 0 1 0 1 1 1 1 1110101111 6
1 1 0 1 1 0 1 1 1 1 1101101111 0
1 0 1 1 1 0 1 1 1 1 1011101111 0
0 1 1 1 1 0 1 1 1 1 0111101111 12
1 1 1 0 0 1 1 1 1 1 1110011111 0
1 1 0 1 0 1 1 1 1 1 1101011111 6
1 0 1 1 0 1 1 1 1 1 1011011111 6
0 1 1 1 0 1 1 1 1 1 0111011111 6
1 1 0 0 1 1 1 1 1 1 1100111111 6
1 0 1 0 1 1 1 1 1 1 1010111111 0
0 1 1 0 1 1 1 1 1 1 0110111111 12
1 0 0 1 1 1 1 1 1 1 1001111111 0
0 1 0 1 1 1 1 1 1 1 0101111111 0


Le paquet Kado contenant le source et les résultats.





Aucun commentaire: