1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| ---------------------------TAQUIN-------------------------------------
% On utilise la structure etatCourant(a,b,c,d,e,f,g,h) pour définir l'étant dans lequel on se trouve.
% On teste si, en passant d'un état courant à un autre, on respecte les consignes de déplacement des carrés.
% Tout d'abord pour les lignes :
etatSuivant(etatCourant(0,A2,A3,B1,B2,B3,C1,C2,C3),
etatCourant(B1,A2,A3,0,B2,B3,C1,C2,C3)).
etatSuivant(etatCourant(X,A2,A3,0,B2,B3,C1,C2,C3),
etatCourant(0,A2,A3,X,B2,B3,C1,C2,C3)).
etatSuivant(etatCourant(A1,A2,A3,X,B2,B3,0,C2,C3),
etatCourant(A1,A2,A3,0,B2,B3,X,C2,C3)).
etatSuivant(etatCourant(A1,A2,A3,0,B2,B3,X,C2,C3),
etatCourant(A1,A2,A3,X,B2,B3,0,C2,C3)).
etatSuivant(etatCourant(A1,0,A3,B1,X,B3,C1,C2,C3),
etatCourant(A1,X,A3,B1,0,B3,C1,C2,C3)).
etatSuivant(etatCourant(A1,X,A3,B1,0,B3,C1,C2,C3),
etatCourant(A1,0,A3,B1,X,B3,C1,C2,C3)).
etatSuivant(etatCourant(A1,A2,A3,B1,0,B3,C1,C2,C3),
etatCourant(A1,A2,A3,B1,C2,B3,C1,0,C3)).
etatSuivant(etatCourant(A1,A2,A3,B1,X,B3,C1,0,C3),
etatCourant(A1,A2,A3,B1,0,B3,C1,X,C3)).
etatSuivant(etatCourant(A1,A2,0,B1,B2,X,C1,C2,C3),
etatCourant(A1,A2,X,B1,B2,0,C1,C2,C3)).
etatSuivant(etatCourant(A1,A2,X,B1,B2,0,C1,C2,C3),
etatCourant(A1,A2,0,B1,B2,X,C1,C2,C3)).
etatSuivant(etatCourant(A1,A2,A3,B1,B2,0,C1,C2,X),
etatCourant(A1,A2,A3,B1,B2,X,C1,C2,0)).
etatSuivant(etatCourant(A1,A2,A3,B1,B2,X,C1,C2,0),
etatCourant(A1,A2,A3,B1,B2,0,C1,C2,X)).
% Puis pour les colonnes :
etatSuivant(etatCourant(X,0,A3,B1,B2,B3,C1,C2,C3),
etatCourant(0,X,A3,B1,B2,B3,C1,C2,C3)).
etatSuivant(etatCourant(0,X,A3,B1,B2,B3,C1,C2,C3),
etatCourant(X,0,A3,B1,B2,B3,C1,C2,C3)).
etatSuivant(etatCourant(A1,X,0,B1,B2,B3,C1,C2,C3),
etatCourant(A1,0,X,B1,B2,B3,C1,C2,C3)).
etatSuivant(etatCourant(A1,0,X,B1,B2,B3,C1,C2,C3),
etatCourant(A1,X,0,B1,B2,B3,C1,C2,C3)).
etatSuivant(etatCourant(A1,A2,A3,X,0,B3,C1,C2,C3),
etatCourant(A1,A2,A3,0,X,B3,C1,C2,C3)).
etatSuivant(etatCourant(A1,A2,A3,0,X,B3,C1,C2,C3),
etatCourant(A1,A2,A3,X,0,B3,C1,C2,C3)).
etatSuivant(etatCourant(A1,A2,A3,B1,X,0,C1,C2,C3),
etatCourant(A1,A2,A3,B1,0,X,C1,C2,C3)).
etatSuivant(etatCourant(A1,A2,A3,B1,0,X,C1,C2,C3),
etatCourant(A1,A2,A3,B1,X,0,C1,C2,C3)).
etatSuivant(etatCourant(A1,A2,A3,B1,B2,B3,X,0,C3),
etatCourant(A1,A2,A3,B1,B2,B3,0,X,C3)).
etatSuivant(etatCourant(A1,A2,A3,B1,B2,B3,0,X,C3),
etatCourant(A1,A2,A3,B1,B2,B3,X,0,C3)).
etatSuivant(etatCourant(A1,A2,A3,B1,B2,B3,C1,X,0),
etatCourant(A1,A2,A3,B1,B2,B3,C1,0,X)).
etatSuivant(etatCourant(A1,A2,A3,B1,B2,B3,C1,0,X),
etatCourant(A1,A2,A3,B1,B2,B3,C1,X,0)).
possible_taquin(X, X, CList, CList).
possible_taquin(X, Y, CList, List) :-
etatSuivant(X, Z),
not(member(Z, CList)),
possible_taquin(Z, Y, [Z | CList], List).
chemin_taquin(X, Y, CheminParcouru) :- possible_taquin(X, Y, [X], CheminParcouru).
-------------------------------------------------------------------------------- |
Partager