Le compte est bon !

Hello,
dans cette période de confinement je n'ai rien à foutre, j'essayais de m'interroger sur une problématique de math appliqué à l'informatique.

Vous connaissez surement l'émission des chiffres et des lettres : on a 7 nombres donnés, et on doit trouver le moyen d'arriver à la valeur la plus proche possible du 7ème nombre en utilisant toutes les opérations qu'on veut (les divisions doivent être entières) sur les 6 premiers nombres (dans l'ordre qu'on veut).M

J'aimerais trouver un algorithme qui résoudrait ce problème. Alors oui, en théorie, je pourrais tester toutes les combinaisons possibles entre les 6 nombres, mais je ne crois pas que ce soit possible dans un temps limité de quelques secondes.
Alors j'essaye de réfléchir à la bonne stratégie à adopter. Quels opérations à privilégier, et comment réaliser un algorithme qui tienne la route.
Mais j'avoue être un peu dépassé. Avez-vous une idée ?
Merci des retours
«1

Réponses

  • Moi je pense qu’il faut tester tout, pour voir.
    Quant à l’algorithme, j’imagine une fonction et une récursivité, pour enchaîner.

    Algorithme digne d’une brute. Sans réfléchir.
  • Avec la vitesse d'un processeur actuel une recherche exhaustive de tous les nombres qu'on peut obtenir comme résultats doit être possible.
  • Le nombre total d'essais est :

    1) Sélectionner une paire parmi 6 : 15 possibilités
    2) Choisir une opération : 4 possibilités
    3) Sélectionner une paire parmi 5: 10 possibilités
    4) Choisir une opération : 4 possibilités
    ...
    En tout le nombre de possibilités est 2764800.
  • Un problème connexe :
    Trouver dans quels cas on peut échanger les opérateurs sans changer le résultat.
    Par exemple $155 = (25 \times 6) + 5 = (25 + 6) \times 5 $
  • Merci à tous pour vos réponses c'est cool.

    JLT écrivait : http://www.les-mathematiques.net/phorum/read.php?5,1966544,1966558#msg-1966558
    [Inutile de recopier l'avant dernier message. Un lien suffit. AD]

    Non plus que ça. D'une, parce que on n'est pas obligé d'utiliser les 6 nombres, et 2, parce que la soustraction et division ne sont pas commutatives, donc en vrai on a 6 opérations possibles.
  • J'ignore si le code source de Renardeau est accessible.
  • On ne peut pas réutiliser un nombre déjà utilisé.
  • Un exercice amusant est de savoir si en s’autorisant des opérations « d’habitudes interdites dans le jeu » (en fait je ne suis pas certain) telles que « 2-8 » ou « 6/7 », on peut retomber sur des entiers à la toute fin.
    Et si ces résultats (obtenus avec des passage par « les nombres interdits ») n’existent que par ces chemins interdits.

    Bon si ce n’est pas clair, pardon...
  • Non, Lucas08,

    il n'y a que 4 opérations en pratiquant ainsi :
    * Choisir un nombre
    * Choisir une opération
    * choisir un nombre et faire l'opération
    * Comparer au résultat et conserver le plus proche et son calcul; Arrêt si trouvé.
    * Choisir une opération
    * choisir un nombre et faire l'opération
    * Comparer au résultat et conserver le plus proche et son calcul; Arrêt si trouvé.
    * Choisir une opération
    * choisir un nombre et faire l'opération
    * Comparer au résultat et conserver le plus proche et son calcul; Arrêt si trouvé.
    * Choisir une opération
    * choisir un nombre et faire l'opération
    * Comparer au résultat et conserver le plus proche et son calcul; Arrêt si trouvé.
    * Choisir une opération
    * choisir un nombre (plus de choix) et faire l'opération
    * Comparer au résultat et conserver le plus proche et son calcul; Arrêt
    Donc au maximum 6*4*5*4*4*4*3*4*2*4*1 = 737280 opérations. Et souvent moins.

    En programmant correctement, on parcourra correctement l'arborescence de ces opérations, et c'est très rapide pour un ordinateur. Comme on dispose de 15 secondes, il aura le temps de trouver.

    Cordialement.
  • Et autre problème connexe, trouver les combinaisons qui sont du gâchis : Avec 2 5 et 3, on peut faire (2x5)-3=7, mais on a gaspillé un 3, on pouvait faire plus court avec 5+2=7 et on a toujours notre 3 disponible.

    Il y a plein d'optimisations possibles : Si mes 6 nombres sont a, b, c, d, e, e , les 2 derniers sont identiques, ça diminue drastiquement le nombre de combinaisons. Idem si mes 6 nombres sont a, b, c, d, e, a+b

    Trouver un algorithme qui trouve le résultat, avec un minimum de calculs, c'est un challenge intéressant. (minimum de calculs, ça veut dire minimum de pistes testées, et donc, toutes choses égales par ailleurs, temps le plus court)
    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
  • @Lucas08 : pour la soustraction, on fait toujours (le plus grand nombre) moins (le plus petit nombre). Ca ne change pas l'ensemble des nombres positifs que l'on peut atteindre à la fin.

    Pour la division, il me semble que dans les règles on doit avoir des nombres entiers à chaque étape, donc on est obligé de diviser le plus grand par le plus petit.

    On n'est pas obligé d'utiliser les six nombres, mais on regarde tous les nombres obtenus lors des étapes intermédiaires, et on prend le plus proche.
  • Dom,

    je ne crois pas que ces opérations soient interdites (le règlement ne le dit pas), mais utiliser des négatifs n'est généralement pas utile. Par exemple le compte (1-4)*25*(7-10) se fait plus simplement par (4-1)*25*(10-7); de même (1-4)+25 se fait par 25-4+1.
    Dans ce que j'ai vu, Renardeau n'en utilise jamais, ni des rationnels non entiers. Mais le règlement n'en parle pas.

    Cordialement
  • Alors oui, en théorie, je pourrais tester toutes les combinaisons possibles entre les 6 nombres, mais je crois pas que ce soit possible dans un temps limité de quelques secondes.

    Si si, c'est tout à fait possible. Il y a quelques années, je l'avais codé en python. Ça examine toutes les possibilités en une seconde ou deux.
    À noter qu'on peut élaguer l'arbre de recherche en ne faisant que les opérations dont le résultat est un entier naturel (on ne fait pas $a-b$ si $b>a$, on ne fait pas $\dfrac{a}{b}$ si $a$ n'est pas divisible par $b$).
  • gerard0 écrivait : http://www.les-mathematiques.net/phorum/read.php?5,1966544,1966604#msg-1966604
    [Inutile de recopier un message présent sur le forum. Un lien suffit. AD]

    Ah je comprends ton point de vue.
    Mais ca n'est pas complet, à mon sens.

    Tu ne peux pas faire le calcul
    (A*B)+(C*D) avec ton algo, par exemple, ou alors je n'ai pas compris.
  • @gerard0 : s'il y a quatre nombres $a,b,c,d$, je ne vois pas comment tu obtiens $(a+b)\times (c+d)$ avec ton algorithme.
  • Ca doit pouvoir se formaliser par un multigraphe dirigé dont les sommets sont les nombres donnés et les arêtes les opérations licites. On parcourt une telle arête puis on remplace la paire de sommets adjacents correspondante par un nouveau sommet résultat de l'opération effectuée, jusqu'à obtenir un graphe minimal.
  • Effectivement, j'ai trop simplifié l'arborescence !!
  • Il y a une applet qui permet de faire ça visiblement:
    https://www.dcode.fr/compte-est-bon
  • J'explique un peu mon algo. On peut représenter la recherche par un parcours d'arbre, dont les sommets sont indexés par la liste des nombres qu'on a à notre disposition pour atteindre le but.
    Exemple : on part de la racine de l'arbre qui est [3,100,10,6,7,6]. De là, on peut (en ajoutant les 2 premiers), aller au sommet [103,10,6,7,6], ou (en multipliant les 2 premiers) à [300,10,6,7,6], etc. Ensuite, de chacun de ces sommets, on peut aller à ..., etc.
    On parcourt tout l'arbre, en mémorisant les opérations effectuées sur le chemin, et on renvoie à la fin ce qui amène au plus près du résultat.
  • Avec 2 et 7 si on veut trouver 1.
    Le plus proche est 2/7 si je ne me trompe pas.
    Par contre pour trouver le bon compte, je crois qu’utiliser un 2/7 n’apporte rien dans le sens où on trouvera un autre enchaînement possible...
  • @Guego : c'est assez similaire à ma proposition non ?
  • J'ai testé il y a quelques années un programme qui résout ce problème sur calculatrice HP48, écrit en assembleur Saturn (l'auteur a écrit un excellent livre sur la programmation de ces calculettes en assembleur : Voyage au centre de la HP48 G/GX). Il donne le résultat très rapidement, quelque chose de l'ordre d'une seconde. Je suis à peu près sûr qu'il s'agit de ce programme. Pour les nostalgiques qui n'ont plus de HP48 en état de marche, il est possible de faire tourner le programme dans un émulateur...
  • Sylvain : oui, c'est ça. Nos messages ont dû plus ou moins se croiser.
  • Je viens de trouver un calcul énoncé qui nécessite un passage aux rationnels non entiers :
    Avec : 1 ; 1 ; 2 ; 14
    Trouver : 21.

    Le site suivant est un régal pour ce fil : https://www.dcode.fr/compte-est-bon

    Edit : Je vois que Fin de partie avait déjà cité ce site.
  • Bonsoir,
    J'ai trouvé la même chose que JLT 2764800.
    Pour éliminer le problème soulevé par Lucas078 on commence par ordonner les nombres dans l'ordre décroissant.
    Cordialement.
  • Mais si on élimine les expressions qui donnent la même chose, il semblerait qu'on ne trouve que 974 860 possibilités pour 6 variables, sans compter les contraintes des divisions entières ni des résultats positifs. J'ai fait un programme qui compte le nombre de combinaisons possibles pour une liste de nombres donnée. Puis j'ai retiré les contraintes que j'ai dites et je lui ai donné des nombres aléatoires entre $0$ et $10^{12}$. Ça m'a donné 974 860 possibilités en sortie aux quatre essais...
  • Il y a longtemps que je n'ai pas regardé l'émission mais il me semble que les seuls nombres susceptibles d'être donnés sont les 10 premiers entiers naturels non nuls et les 4 premiers multiples de 25 non nuls. Le nombre à trouver est quant à lui au plus égal à 999.
  • Bonjour à tous

    On peut se poser plein d'autres questions avec les plaques proposées par Sylvain ( il me semble en plus que le chiffre des centaines de la cible ne doit pas être 0 ) .

    1°) Existe-t-il une cible qu'on peut atteindre quel que soit le tirage des 7 plaques ?

    2°) Quelle est la pire cible possible ( la plus difficile à atteindre ) ?

    3°) Quel est le pire tirage possible pour les 7 plaques ( 100,100,100, ... me semble un bon candidat ) .

    Domi
  • Rappel du règlement du jeu (*)
    Deux séries de 10 plaques numérotées de 1 à 10
    Quatre plaques portant les nombres 25 - 50 - 75 et 100.
    Elles aussi sont enregistrées sur ordinateur.
    Il s’agit pour les deux candidats, à l’aide de leur écran tactile, d’effectuer dans un temps déterminé, un certain nombre d’opérations d’arithmétique élémentaire : addition, division, soustraction ou multiplication, afin de trouver exactement un nombre de trois chiffres proposé par le hasard ou de s’en approcher le plus possible. Ils disposent pour ces opérations de 40 secondes. Ce nombre de trois chiffres que les joueurs doivent retrouver ou dont ils doivent s’approcher le plus possible, est proposé aléatoirement au moyen d’un système électronique affichant unités, dizaines et centaines. Pour effectuer leurs calculs, les deux candidats ont à leur disposition, six plaques proposées elles aussi aléatoirement par l’ordinateur. Il est très important de préciser que, dans les calculs effectués par les candidats, chacune des six plaques ne peut être utilisée qu’une seule fois, mais les candidats ne sont pas tenus d’utiliser toutes les plaques.
    Donc 6 plaques parmi 24; on ne peut pas avoir deux 25, 50, 75 ou 100 et pour les nombres de 1 à 10, il ne peut pas y en avoir 3.

    Cordialement.


    (*) après, on peut faire ce qu'on veut ici :-)
  • J'ai réussi par la méthode d'un graphe (:P)
    Merci pour ces conseils.

    Bon contre en moyenne c'est calculé en 38s en moyenne, c'est beaucoup mais moins que ce que je pensais au départ.
    Je peux ptet optimiser, mais j'enlèverais ptet 10%, ca restera à 34, 35s.
  • Le temps de réflexion est 40 s.
  • Dans les règles suscitées, je ne vois pas que chaque calcul doit être entier.
    Mais ce n’est peut-être pas le règlement exhaustif (?).
  • J'ai plusieurs fois participé et techniquement, on ne peut utiliser que des nombres entiers (message d'erreur quand on veut obtenir un non-entier).
  • Une question bête : si on peut atteindre la cible en passant par des décimaux non entiers ou des rationnels non décimaux , est-on assuré de pouvoir atteindre la cible en ne passant que par des entiers ?

    Domi
  • Bonjour,

    Comment obtenir $21$ avec $1,5,6,7$ ?

    Réponse: $\dfrac{6}{1-\dfrac{5}{7}}$

    Essaie avec seulement des entiers !!...

    Cordialement,

    Rescassol
  • C'est bien ce que je pensais , donc la règle est incomplète . Le résultat de chaque opération doit rester dans l'ensemble des entiers naturels .

    Domi
  • @kioups: tu es allé jusqu'où ?
  • J'avais gagné 3 matchs (à l'époque, c'était en deux manches gagnantes et le maximum était 5 matchs).
  • Pas mal du tout ! J'avais passé les sélections à Rouen en 2005 et avais été sélectionné, mais je n'ai jamais eu de nouvelles après avoir donné mes dates de disponibilité.
  • Ah ben d'ailleurs, j'ai aussi repassé les sélections l'an dernier. On m'avait proposé d'enregistrer début juillet, ça collait pas avec le bac. Depuis, j'attends... et pas sûr que l'émission dure encore longtemps !
  • C'est toujours la même équipe ? Laurent Romejko, Arielle Boulin-Prat, Bertrand Renard ?
  • Oui, oui, ça ne change pas.
  • B.Renard arrivé à ce poste en 1975, puis Arielle Boulin-Prat depuis 1986 , puis Laurent Romejko , le petit jeune, depuis 1992.

    J'ai essayé de mettre des dates de mémoire, et je me suis planté de 10 ou 15 ans environ pour chacun des 3 !
    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
  • Moi j'en étais encore à Patrice Laffont. D'ailleurs je suis passé à la télé il y a une trentaine d'années...





    ... parmi les spectateurs.
  • Comme j'aime bien les questions bêtes : "et si on est passé par un résultat négatif , peut-on toujours réussir avec les règles communément admises ?"

    Domi
  • J'imagine qu'une opération donnant un résultat négatif aboutit également à un message d'erreur.
  • Si on est passé par un entier négatif, c'est qu'on a fait $x=a-b$ à une étape.

    Rien n'empêchait de faire $y=b-a$ au lieu de $x=a-b$, puis d'utiliser $-y$ au lieu d'utiliser $x$ dans la suite du calcul.

    Tout calcul qui passe par un entier négatif peut être remplacé par un calcul conforme aux règles.
    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
  • Oui Lourran , intuitivement on remplace les soustractions par des additions et réciproquement et comme les multiplications et les divisions se fichent un peu des signes , on retombe sur ses pattes mais l'air de rien ce n'est pas facile à justifier proprement . Il peut y avoir plusieurs passages par les négatifs , il ne suffit pas d'inverser la machine , il faut aussi réorganiser les calculs .

    Domi
  • Je propose une variante du jeu, trop complexe pour un jeu-télé, mais intéressante pour un algorithme.

    On a les mêmes 24 plaques : 2 plaques pour chacun des nombres 1 à 10, 1 plaque pour chacun des nombres 25, 50, 75, et 100.
    On tire 7 plaques parmi ces 24 plaques.
    7 plaques au lieu de 6 dans la variante connue.
    Et on tire 2 nombres entre 100 et 999.
    Le but du jeu est de 'reconstituer ces 2 derniers nombres', chaque plaque étant utilisée au maximum une fois.

    Exemple :
    A partir des plaques 2 3 5 8 10 10 et 50, obtenir les nombres 186 et 510
    Solution : $50*10+10=510$ puis $510/3+(2*8)=186$

    Pour atteindre le 2ème résultat 186, on peut réutiliser le 1er résultat (510) , mais pas forcément.

    Cf 2ème exemple :
    A partir des mêmes plaques 2 3 5 8 10 10 et 50, obtenir les nombres 210 et 424
    Solution : $(10*10+5)*2=210$ et $(50+3)*8=424$
    Aucune des plaques utilisées dans le 2ème calcul n'avait été utilisée dans le premier.

    On part du principe que les 7 plaques et les 2 nombres sont choisis de sorte qu'il y ait au moins une solution.
    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
Connectez-vous ou Inscrivez-vous pour répondre.