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 France à partir de 1965 (il s'appelait alors "Le Mot le plus long"), puis fut renommé sous son appelation définition "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
plaques_restantes
qui contient la liste des plaques qui n'ont pas encore été utiliséescible
qui est le nombre à trouverCette fonction va rechercher toutes les solutions au problème. Dès qu'on aura réaliser un calcul on ajoute 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 |
plaques_restantes (liste d'entiers) : plaques restantes pour les calculs cible (entier) : nombre à atteindre par les calculs |
Sortie | Aucune, on affichera "Solution" si on trouve une solution |
Variableslocales | $a$ et $b$ les deux plaques choisies à chaque itération |
Description | on choisi deux plaques $a$ et $b$ puis on essaye de rechercher la cible par utilisation de $a+b$, $a-b$, $a×b$ et $a/b$ si ces opérations sont valides. |
|
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 cible = 899 et selection_de_plaques = [3,5,8,9,9,25], vous devriez obtenir :
Solution
['5+25=30', '3*30=90', '9+90=99', '9*99=891', '8+891=899']
Solution
['5+25=30', '3*30=90', '9+90=99', '9*99=891', '8+891=899']
nombre de solutions=2
S'il vous reste du temps, tentez d'apporter les améliorations suivantes à votre programme :