Maître de Conférences en Informatique à l'Université d'Angers
Ce site est en cours de reconstruction certains liens peuvent ne pas fonctionner ou certaines images peuvent ne pas s'afficher.
On s'intéresse à la résolution du problème "Le compte est bon" issu du jeu "Des Chiffres et des Lettres" créé par le producteur français Armand Jammot, jeu télévisé français diffusé sur Antenne 2 (maintenant France 2) à partir de 1965 (il s'appelait alors "Le Mot le plus long"), puis fut renommé sous son appelation "Des chiffres et des lettres" à partir de 1972.
Le but du "Compte est bon" est d'obtenir un nombre cible généré aléatoirement compris entre 101 et 999 à partir d'opérations élémentaires (addition, soustraction, multiplication, division entière) sur des entiers naturels, en utilisant 6 plaques tirées au hasard parmi un ensemble de plaques qui comportent des nombres dans la liste [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 25, 50, 75, 100].
À défaut de trouver le compte exact, il faut tenter de s'approcher le plus près possible du nombre cible.
On va ici considérer que le nombre cible est atteignable par les 6 plaques tirées aléatoirement.
Dans un premier temps, on va écrire dans le fichier
Cette fonction va rechercher toutes les solutions au problème de manière récursive. Dès qu'on aura réalisé un calcul, on ajoutera le résultat de ce calcul aux plaques restantes. Il faudra le retirer pour passer à l'opération suivante. Par exemple à partir des plaques 3 et 5 et de la multiplication on génère 15. On retire 3 et 5 des plaques restantes et on y ajoute 15.
L'algorithme de la fonction est le suivant :
| Procédure resoudre(plaques_restantes, cible) | |
|---|---|
| Entrée |
|
| Sortie | Aucune, on affichera "Solution" si on trouve une solution |
| Variableslocales | $a$ et $b$ les deux plaques choisies à chaque itération |
| Description |
on choisit deux plaques $a$ et $b$ puis on essaye de rechercher la cible par
utilisation des quatre opérations arithmétiques si elles sont valides :
|
Afficher le code ens/l1/python1/tp10_le_compte_est_bon/resoudre.algo
|
|
Exercice 10.1
Ecrire le programme correspondant et le tester avec
Attention certaines solutions sont identiques.
Exercice 10.2
Modifiez le programme précédent afin de compter le nombre de solutions et d'afficher combien de solutions ont été trouvées.
Exercice 10.3
Modifiez le sous-programme
Ainsi, avec
Solution 1: ['3+9=12', '8*9=72', '5+72=77', '12*77=924', '924-25=899']
Solution 2: ['3+9=12', '8*9=72', '5+72=77', '77*12=924', '924-25=899']
Solution 3: ['3+9=12', '8*9=72', '72+5=77', '12*77=924', '924-25=899']
Solution 4: ['3+9=12', '8*9=72', '72+5=77', '77*12=924', '924-25=899']
...
Solution 191: ['25+9=34', '34*9=306', '306-8=298', '298*3=894', '5+894=899']
Solution 192: ['25+9=34', '34*9=306', '306-8=298', '298*3=894', '894+5=899']
nombre de solutions=192
Note : on trouve plusieurs fois la même solution car il y a deux plaques 9.
S'il vous reste du temps, tentez d'apporter les améliorations suivantes à votre programme :