1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- :- use_module(library(lists)).
-
- disque(a, [-1,0,0,0,0,0]).
- disque(b, [-1,-1,0,0,0,0]).
- disque(c, [-1,0,-1,0,0,0]).
- disque(d, [-1,0,0,-1,0,0]).
- disque(e, [-1,-1,-1,0,0,0]).
- disque(f, [-1,-1,0,-1,0,0]).
- disque(g, [-1,0,-1,0,-1,0]).
- disque(h, [-1,-1,-1,-1,0,0]).
- disque(i, [-1,-1,-1,0,-1,0]).
- disque(j, [-1,-1,0,-1,-1,0]).
- disque(k, [-1,-1,-1,-1,-1,0]).
- disque(l, [-1,-1,-1,-1,-1,-1]).
-
- liste_des_disques(L) :-
- findall(X,disque(X,_),L).
-
-
- % rotation_droite([Head | []],[Head]).
-
- /* rotation_droite([Head | Tail], R) :-
- rotation_droite(Tail, RAux),
- append(RAux,[Head], R). */
-
- rev([], []).
-
- rev([Head | Tail], Res) :-
- rev(Tail, X),
- append(X, [Head],Res).
-
- /* rotation_droite(M, [Head | R]) :-
- rev(M, [Head | Tail]),
- rev(Tail, R). */
-
- rotation_droite([Head | Tail], Res) :-
- append(Tail, [Head], Res).
-
- orienter(M1,M1,0,_).
-
- orienter(M1,M2,N,Ref) :-
- rotation_droite(M1,Aux),
- Aux \= Ref,
- orienter(Aux,M2,Naux,Ref),
- N is Naux + 1.
-
-
- empilement_secteur(0,0,0).
- empilement_secteur(2,-1,1).
- empilement_secteur(0,-1,2).
- empilement_secteur(1,-1 ,0).
-
- empilement([], [], []).
-
- empilement([Head1 | Tail1], [HeadM | TailM], [Head2 | Tail2]) :-
- empilement_secteur(Head1,HeadM,Head2),
- empilement(Tail1,TailM,Tail2).
-
- etat_initial([[0,0,0,0,0,0], L]) :-
- liste_des_disques(L).
-
- etat_final([[0,0,0,0,0,0], []]).
-
- arc([S1,L1],[S2, L2],[D,N]) :-
- S1 = [0,0,0,0,0,0],
- N = 0,
- select(D, L1, L2),
- disque(D, F),
- orienter(F,F2,N,F),
- empilement(S1,F2,S2).
-
- arc([S1,L1],[S2, L2],[D,N]) :-
- S1 \= [0,0,0,0,0,0],
- select(D, L1, L2),
- disque(D, F),
- orienter(F,F2,N,F),
- empilement(S1,F2,S2).
-
- trouver_solution([], EtatFinal, EtatFinal).
-
- trouver_solution([ResAux1 | ResAux2], EtatCourant, EtatFinal) :-
- arc(EtatCourant, EtatSuivant, ResAux1),
- trouver_solution(ResAux2, EtatSuivant, EtatFinal).
-
-
- solution(S) :-
- etat_initial(EtatInit),
- etat_final(EtatFinal),
- trouver_solution(S,EtatInit,EtatFinal).
|