Bonjour bonjour,
je viens solliciter votre aide car je dois résoudre l'énigme des seaux dans le langage Prolog, j'ai commencé à chercher la solution mais je me retrouve bloqué, et vu le peu d'exemples et d'aides disponibles en ligne je viens demander de l'aide. Voici le problème :
On considère qu’un état du problème est défini par deux entiers : les contenus des deux seaux. Ecrire le prédicat solution/1 qui détermine la liste des états permettant de passer de [0,0] à un état comprenant la valeur 4. Le résultat est donc une liste de listes à 2 éléments représentant le contenu des deux seaux. Par exemple : [[0,0],[5,0],[2,3],...... [4,0]]. Initialement, cette liste est vide. Les opérations possibles sont :
- remplir le seau 1 (seau de 5 litres)
- remplir le seau 2 (seau de 3 litres)
- vider le seau 1 dans le seau 2 - vider le seau 2 dans le seau 1
- vider complètement le seau 1
- vider complètement le seau 2
a) Ecrire le prédicat solution/1, il fera appel à un prédicat solution/2 qui à partir d’une liste intermédiaire d’états, détermine la liste solution.
b) Ecrire le prédicat best_solution/1 qui calcule toutes les solutions possibles, affiche le nombre de solutions trouvées, en sélectionne la plus courte et l’affiche
Voici le code que j'ai fait pour répondre à la première question :
Cependant quand je cherche solution(S). Prolog m'affiche "false". Pourriez-vous m'aider?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 operation([S1,S2],[5,S2]):- S1=\=5. operation([S1,S2],[S1,3]):- S2=\=3. operation([S1,S2],[0,S2]):- S1=\=0. operation([S1,S2],[S1,0]):- S2=\=0. operation([S1,S2],[S3,0]):- S3=<5, S3 is S1+S2. operation([S1,S2],[5,S4]):- S4>5, S4 is S1+S2-5. operation([S1,S2],[0,S4]):- S4<3, S4 is S1+S2. operation([S1,S2],[S3,3]):- S1+S2>3, S3 is S1+S2-3. solution(S,S):-last(S,[4,_]). solution(L,S):-last(L,[A,B]), operation([A,B],[S1,S2]),not(memberchk([S1,S2],L)),append(L,[S1,S2],L1),solution(L1,S). solution(S):- solution([0,0],S).