Bonjour à tous,
Retraite et confinement obliges, j'occupe une partie de mon temps sur un livre d'énigmes logiques (La Bible des énigmes logique, de J.M. Maman, editions ESI) et je suis tombé sur un problème que Prolog pourrait peut-être facilement traiter (voir l'image jointe, les chiffres dans les cases sont pour les identifier, pas une tentative de solution!)
Je ne connais ce langage que par des publications (je sais que dans ma boîte, il avait été expérimenté il y a une vingtaine d'années, pour tenter de résoudre des problèmes de configuration et d'installation d'équipements télécom, mais sans suite)
De métier informaticien (essentiellement en VBasic), j'ai tenté de m'y mettre mais j'ai vite déchanté! On ne rentre pas dans ce langage la fleur au fusil. Impatient d'avoir une solution (sur les 12 possibles mais qui sont toutes liées, de par les propriétés de symétrie - rotation et miroir -), j'ai développé un programme en Python - que je ne connaissais pas- d'environ 300 lignes. En cherchant à minimiser la combinatoire, ce programme me retourne une solution en environ 1 heure
J'aimerais soumettre aux experts Prolog (qui je pense sont aussi des bêtes en mathématiques) deux questions :
1) y a-t-i une solution mathématique à ce problème? (j'ai tenté de le mettre en équations, la contrainte de somme à 38 s'appliquant à 15 lignes, pour 19 inconnues, je n'ai pas abouti. Il existe d'autres contraintes mais sous forme d'inégalités - par exemple si on ne considère que les deux lignes L1 et L5, il faut que case 1 + case 19 < 33) C'est ce type d'inégalités que j'ai appliqué dans le programme Python pour exclure des lignes entre elles.
2) une programmation Prolog est-elle envisageable, pour une complexité et un temps de réponse équivalents, voire meilleurs que dans un langage classique interprété?
Si l'un d'entre vous a un peu de temps (de loisir) à consacrer, je le remercie d'avance
Cordialement
Partager