LogiSolv

Ce programme permet de résoudre les logigrammes.

Ce sont des jeux de réflexion, ils comportent une série d'indices et il faut trouver la solution de l'énigme.

L'énigme plus connue est celle des 5 maisons, car elle aurait été inventée par Einstein quand il avait 10 ans (enfin très jeune ;) voir (http://www.jeuxlogiques.fr/integramme/index/grille?grille=5)

Personnellement je trouve ces énigmes très difficiles à résoudre, et j'ai été curieux de voir si il était possible d'écrire un programme pouvant le faire.

Finalement cela ne pose pas de problème à un programme, qui résoud les plus difficiles (niveau diabolique) en une fraction de seconde.

Le programme permet de résoudre toutes les enigmes du site http://www.jeuxlogiques.fr/integramme/index/index

Utilisation:

Le programme fonctionne en ligne de commande. Il faut lui passer en paramètre un fichier texte contenant les données de l'énigme à résoudre.

Pour définir ce fichier texte il faut exécuter 2 opérations.

- Définir la liste des valeurs pouvant être prise par un objet (ex: nom, couleur, métier,..)

- Convertir les affirmations littérales (parfois alambiquée) en un série de propositions simples devant être vérifiées. C'est la principale difficulté, mais c'est bien plus facile que de résoudre l'énigme.

Par exemple (enigme 4), pour l'affirmation:

 L'émission de sport n'est pas diffusée 15 minutes plus tard que le reportage, qui n'est pas diffusée le vendredi.

il faut écrire 2 affirmations:

 sport.heure ! reportage.heure + 15min
 reportage.jour ! vendredi 

Description de l'enigme 1 (http://www.jeuxlogiques.fr/integramme/index/grille?grille=1)

 Il s'agit ici de trouver pour chaque personne, son âge, son métier et son année d'embauche
  1 Lucas, qui a plus de 38 ans, a ete embauche en 2004.
  2 Emma est plus jeune que la personne qui est psychologue, mais moins que celle qui a ete embauchee en 2002 et qui n'est pas traiteur.
  3 La personne qui est opticien a ete embauchee avant Theo, qui a 41 ans, mais apres la personne la plus jeune.
  4 La personne qui est traiteur n'a pas ete embauchee en 2000 ni en 2003.
  5 Margaux est plus agee que la personne qui est consultant, mais plus jeune que celle qui est traiteur.
  6 La personne de 38 ans a ete embauchee en 2002.

En premier lieu il faut définir les catégories et les valeurs pouvant être prises. Pour cette enigme on obtiens:

>personne Lucas Marie Theo Margaux Emma
>age 35ans 38ans 41ans 44ans 47ans
>metiers opticien consultant psychologue pilote traiteur
>embauche 2000 2001 2002 2003 2004

Important : le caratére '>' en début de ligne permet de définir une catégorie.

Ensuite il faut convertir chaque affirmation: on obtiens:

// Lucas, qui a plus de 38 ans, a ete embauche en 2004
Lucas.age > 38ans
Lucas.embauche 2004
// Emma est plus jeune que la personne qui est psychologue, mais moins que celle qui a ete embauchee en 2002 et qui n'est pas traiteur. 
Emma.age < psychologue.age
Emma.age > embauche.2002.age 
2002.metiers ! traiteur
// La personne qui est opticien a ete embauchee avant Theo, qui a 41 ans, mais apres la personne la plus jeune. 
opticien.embauche < Theo.embauche 
Theo.age 41ans 
opticien.embauche > 35ans.embauche 
// La personne qui est traiteur n'a pas ete embauchee en 2000 ni en 2003. 
traiteur.embauche ! 2000 
traiteur.embauche ! 2003 
// Margaux est plus agee que la personne qui est consultant, mais plus jeune que celle qui est traiteur. 
Margaux.age > consultant.age 
Margaux.age < traiteur.age 
// La personne de 38 ans a ete embauchee en 2002. 
38ans.embauche 2002 

Suite à cela, le fichier peut être interprété par le programme pour résoudre l'énigme.

Par exemple, si le fichier est sauvé sous le nom test.txt, on utilise en ligne de commande: (ouvrir une console avec cmd)

logisolv -n 1 test.txt

note: le paramètre -n (valeur) permet de limiter la recherche à n solutions. En général il n'y a qu'une seule solution, mais pas toujours, par exemple l'enigme 6 comporte 7 solutions. Ce paramètre est optionnel et vaut 1 par défaut.

Format des affirmations:

le '.' permet de définir la catégorie. il est optionel sur le second terme si la catégorie est la même que celui du premier.

 ex: Emma.age > Theo.age
 peut être écrit
 Emma.age > Theo 
Opérateurs logiques:
'' (aucun) => est, ou égale pour les valeurs numériques.
'!' => n'est pas, ou n'est pas égal pour les valeurs numériques.
'>' => supérieur
'>=' => supérieur ou égal
'<' => inférieur
'<=' => inférieur ou égal
Opérateurs arithmetiques:
'+' '-' '/' '*' '%(modulo)'
Opérateurs 'ou' : Certaines affirmations nécessitent un opérateur 'ou' pour être codées (voir eni_5.txt)
'|' => ou
'^' => ou exclusif

Il est possible d'utiliser des parenthèses dans les expression 'ou', mais celle ci doivent tenir sur une même ligne. (chaque ligne correspondant à une affirmation 'et' devant être vérifiée)

Le plus rapide pour comprendre l'utilisation du programme est d'étudier les différents fichiers d'exemples.

Téléchargement: : logisolv.exe

Fichiers d'énigmes (exemples):

eni_1.txt
eni_2.txt
eni_3.txt
eni_4.txt
eni_5.txt
eni_6a.txt
eni_6b.txt
eni_6c.txt
eni_7.txt
eni_8.txt

Solutions des énigmes:

sol_1.txt
sol_2.txt
sol_3.txt
sol_4.txt
sol_5.txt
sol_6a.txt
sol_6b.txt
sol_6c.txt
sol_7.txt
sol_8.txt

Ce programme a comme principal intérêt de montrer que ce qui est difficile pour un humain (le raisonnement logique) et facilement réalisable sur ordinateur avec un programme simple. Par contre ce qui est facile pour un humain (l'interprétation des phrases) est un tout autre problème bien plus complexe à programmer.

Ce programme est en version 1.0. Si vous rencontrer des bugs, ou des énigmes qu'il n'est pas capable de résoudre, n'hésitez pas à me contacter. (pierrel5@free.fr)

Bon amusement..

 

Visiteurs depuis janvier 2015