Liste des Groupes | Revenir à fs maths |
Le 22/02/2022 à 16:20, Jacques Mathon a écrit :Il semblerait que ton code laisse passer des possibilités.
Je me propose de te le faire jouer justement pour éprouver ton code. Si tu en es d'accord j'attends ta première proposition pour un hard dont le résultat vaut 132.J’ai encode cela comme suit:
Ou si tu préfères, tu pars de mon premier coup et de sa réponse.
5 4 * 7 / 3 + 6
⬜ 🟨 🟨 ⬜ 🟨 ⬜ 🟩 🟨
>
main :- find([
"0124689+-*/()", % tous les symboles non gris
"012689+-*/()", % orange -> 4 retiré de la liste
"0124689+-/()", % orange -> 5 retiré de la liste
"0124689+-*/()",
"0124689+-*()", % orange -> / retiré "0124689+-*/()",
"+", % vert -> seul + reste
"012489+-*/()"
],132,Str), puts(Str), nl, fail.
A savoir qu’on part de la chaîne "0123456789+-*/" partout qui contient tous les symboles possibles. Ensuite on retire tous les symboles correspondants aux cases grises. Elles sont interdite.
On place 8 copies de la chaîne dans la liste passée à find, puis pour chaque case orange on retire le symbole de la chaîne. On ne garde aussi que le seul symbole des cases vertes.
Le code va alors construire plein de chaînes plausibles respectant ces contraintes et n’afficher que celles qui s’évaluent sans erreur à 132.
Si j’impose de ne pas avoir se doublons, il n’y a pas beaucoup de résultats (au bug près)
190-62+4
204-81+9
209-81+4
214-90+8
218-90+4
6/2*41+9
8*(16)+4
9*14-2+8
(16*8)+4
(16)*8+4
(8)*16+4
Cela s’obtiens en 10 secondes sur un smartphone.Je regarderai...
Le code "as is" est là : https://pastebin.com/hWGjaHnW
Edit: je pense qu’il y a un bug car je ne vois pas les solutions basées sur la commutativité.Je ne crois pas avoir parlé de commutativité pour ce problème.
Les messages affichés proviennent d'usenet.