]> AND Private Git Repository - cours-maths-dis.git/blob - tpProlog/anerouge_old/#anerougeAssoc2.pl#
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
pgcd, euclide,...
[cours-maths-dis.git] / tpProlog / anerouge_old / #anerougeAssoc2.pl#
1 /* accesseurs sur ligne et colonne*/
2 :-use_module(library(assoc)).
3
4
5 ordonne((X,Y1),(X,Y2),(X,Ym),(X,YM)):-
6     YM is max(Y1,Y2),
7     Ym is min(Y1,Y2),!.
8 ordonne((X1,Y1),(X2,Y2),(X1,Y1),(X2,Y2)):-
9     X1 is min(X1,X2),!.
10 ordonne((X1,Y1),(X2,Y2),(X2,Y2),(X1,Y1)):-
11     X2 is min(X1,X2),!.
12
13
14 /*rouge droite */
15 glissement(ro,d,Conf1,Conf2,Xr,Y):-
16     gen_assoc(ro,Conf1,[1-(Xr,Y)]),
17     gen_assoc(vi,Conf1,[1-(Xv,Y),2-(Xv,Yp)]),
18     Xv is Xr +2,Xp is Xr+1,Yp is Y +1,
19     put_assoc(ro,Conf1,[1-(Xp,Y)],Conf1b),
20     put_assoc(vi,Conf1b,[1-(Xr,Y),2-(Xr,Yp)],Conf2).
21
22 /*rouge gauche */
23 glissement(ro,g,Conf1,Conf2,Xr,Y):-
24     gen_assoc(ro,Conf1,[1-(Xr,Y)]),
25     gen_assoc(vi,Conf1,[1-(Xv,Y),2-(Xv,Yp)]),
26     Xv is Xr -1,Xp is Xr+1,Yp is Y +1,
27     put_assoc(ro,Conf1,[1-(Xv,Y)],Conf1b),
28     put_assoc(vi,Conf1b,[1-(Xp,Y),2-(Xp,Yp)],Conf2).
29
30 /*rouge bas */
31 glissement(ro,b,Conf1,Conf2,Xr,Y):-
32     gen_assoc(ro,Conf1,[1-(Xr,Y)]),
33     gen_assoc(vi,Conf1,[1-(Xr,Yv),2-(Xp,Yv)]),
34     Xp is Xr +1, Yv is Y+2,Yp is Y+1,
35     put_assoc(ro,Conf1,[1-(Xr,Yp)],Conf1b),
36     put_assoc(vi,Conf1b,[1-(Xr,Y),2-(Xp,Y)],Conf2).
37
38 /*rouge haut */
39 glissement(ro,h,Conf1,Conf2,Xr,Y):-
40     gen_assoc(ro,Conf1,[1-(Xr,Y)]),
41     gen_assoc(vi,Conf1,[1-(Xr,Yv),2-(Xp,Yv)]),
42     Yv is Y-1,Yp is Y+1,Xp is Xr +1,
43     put_assoc(ro,Conf1,[1-(Xr,Yv)],Conf1b),
44     put_assoc(vi,Conf1b,[1-(Xr,Yp),2-(Xp,Yp)],Conf2).
45
46 /*noir1 droite */ 
47 glissement(no,d,Conf1,Conf2,Xn1,Yn1):-
48     gen_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
49     gen_assoc(vi,Conf1,[1-(Xv,Yn1),2-(Xv,Yv2)]),
50     Xv is Xn1+1,Yv2 is Yn1+1,
51     ordonne((Xv,Yn1),(Xn2,Yn2),No1,No2),
52     put_assoc(no,Conf1,[1-No1,2-No2],Conf1b),
53     put_assoc(vi,Conf1b,[1-(Xn1,Yn1),2-(Xn1,Yv2)],Conf2).
54
55 /*noir2 droite */ 
56 glissement(no,d,Conf1,Conf2,Xn2,Yn2):-
57     gen_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
58     gen_assoc(vi,Conf1,[1-(Xv,Yn2),2-(Xv,Yv2)]),
59     Xv is Xn2+1,Yv2 is Yn2+1,
60     put_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xv,Yn2)],Conf1b),
61     put_assoc(vi,Conf1b,[1-(Xn2,Yn2),2-(Xn2,Yv2)],Conf2).
62
63 /*noir1 gauche */ 
64 glissement(no,g,Conf1,Conf2,Xn1,Yn1):-
65     gen_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
66     gen_assoc(vi,Conf1,[1-(Xv,Yn1),2-(Xv,Yv2)]),
67     Xv is Xn1-1,Yv2 is Yn1+1,
68     put_assoc(no,Conf1,[1-(Xv,Yn1),2-(Xn2,Yn2)],Conf1b),
69     put_assoc(vi,Conf1b,[1-(Xn1,Yn1),2-(Xn1,Yv2)],Conf2).
70
71 /*noir2 gauche */ 
72 glissement(no,g,Conf1,Conf2,Xn2,Yn2):-
73     gen_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
74     gen_assoc(vi,Conf1,[1-(Xv,Yn2),2-(Xv,Yv2)]),
75     Xv is Xn2-1,Yv2 is Yn2+1,
76     ordonne((Xv,Yn2),(Xn1,Yn1),No1,No2),
77     put_assoc(no,Conf1,[1-No1,2-No2],Conf1b),
78     put_assoc(vi,Conf1b,[1-(Xn2,Yn2),2-(Xn2,Yv2)],Conf2).
79
80 /*noir1 bas */ 
81 glissement(no,b,Conf1,Conf2,Xn1,Yn1):-
82     gen_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
83     gen_assoc(vi,Conf1,[1-(Xn1,Yv1),2-Nv2]),
84     Yn1p is Yn1+1,Yv1 is Yn1+2,
85     put_assoc(no,Conf1,[1-(Xn1,Yn1p),2-(Xn2,Yn2)],Conf1b),
86     put_assoc(vi,Conf1b,[1-(Xn1,Yn1),2-Nv2],Conf2).
87
88 /*noir1 bas */ 
89 glissement(no,b,Conf1,Conf2,Xn1,Yn1):-
90     gen_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
91     gen_assoc(vi,Conf1,[1-Nv1,2-(Xn1,Yv1)]),
92     Yn1p is Yn1+1,Yv1 is Yn1+2,
93     put_assoc(no,Conf1,[1-(Xn1,Yn1p),2-(Xn2,Yn2)],Conf1b),
94     put_assoc(vi,Conf1b,[1-Nv1,2-(Xn1,Yn1)],Conf2).
95
96 /*noir2 bas */ 
97 glissement(no,b,Conf1,Conf2,Xn2,Yn2):-
98     gen_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
99     gen_assoc(vi,Conf1,[1-(Xn2,Yv1),2-Nv2]),
100     Yn2p is Yn2+1,Yv1 is Yn2+2,
101     put_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2p)],Conf1b),
102     put_assoc(vi,Conf1b,[1-(Xn2,Yn2),2-Nv2],Conf2).
103
104 /*noir2 bas */ 
105 glissement(no,b,Conf1,Conf2,Xn2,Yn2):-
106     gen_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
107     gen_assoc(vi,Conf1,[1-Nv1,2-(Xn2,Yv2)]),
108     Yn2p is Yn2+1,Yv2 is Yn2+2,
109     put_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2p)],Conf1b),
110     put_assoc(vi,Conf1b,[1-Nv1,2-(Xn2,Yn2)],Conf2).
111
112 /*noir1 haut */ 
113 glissement(no,h,Conf1,Conf2,Xn1,Yn1):-
114     gen_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
115     gen_assoc(vi,Conf1,[1-(Xn1,Yv1),2-Nv2]),
116     Yv1p is Yn1+1,Yv1 is Yn1-1,
117     put_assoc(no,Conf1,[1-(Xn1,Yv1),2-(Xn2,Yn2)],Conf1h),
118     put_assoc(vi,Conf1h,[1-(Xn1,Yv1p),2-Nv2],Conf2).
119
120 /*noir1 haut */ 
121 glissement(no,h,Conf1,Conf2,Xn1,Yn1):-
122     gen_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
123     gen_assoc(vi,Conf1,[1-Nv1,2-(Xn1,Yv1)]),
124     Yv1p is Yn1+1,Yv1 is Yn1-1,
125     put_assoc(no,Conf1,[1-(Xn1,Yv1),2-(Xn2,Yn2)],Conf1h),
126     put_assoc(vi,Conf1h,[1-Nv1,2-(Xn1,Yv1p)],Conf2).
127
128 /*noir2 haut */ 
129 glissement(no,h,Conf1,Conf2,Xn2,Yn2):-
130     gen_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
131     gen_assoc(vi,Conf1,[1-(Xn2,Yv1),2-Nv2]),
132     Yv1p is Yn2+1,Yv1 is Yn2-1,
133     put_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yv1)],Conf1h),
134     put_assoc(vi,Conf1h,[1-(Xn2,Yv1p),2-Nv2],Conf2).
135
136 /*noir2 haut */ 
137 glissement(no,h,Conf1,Conf2,Xn2,Yn2):-
138     gen_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
139     gen_assoc(vi,Conf1,[1-Nv1,2-(Xn2,Yv2)]),
140     Yv2p is Yn2+1,Yv2 is Yn2-1,
141     put_assoc(no,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yv2)],Conf1h),
142     put_assoc(vi,Conf1h,[1-Nv1,2-(Xn2,Yv2p)],Conf2).
143
144 /*jaune1 droite */ 
145 glissement(ja,d,Conf1,Conf2,Xn1,Yn1):-
146     gen_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
147     gen_assoc(vi,Conf1,[1-(Xv,Yn1),2-(Xv,Yv2)]),
148     Xv is Xn1+1,Yv2 is Yn1+1,
149     ordonne((Xv,Yn1),(Xn2,Yn2),Ja1,Ja2),
150     put_assoc(ja,Conf1,[1-Ja1,2-Ja2],Conf1b),
151     put_assoc(vi,Conf1b,[1-(Xn1,Yn1),2-(Xn1,Yv2)],Conf2).
152
153 /*jaune2 droite */ 
154 glissement(ja,d,Conf1,Conf2,Xn2,Yn2):-
155     gen_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
156     gen_assoc(vi,Conf1,[1-(Xv,Yn2),2-(Xv,Yv2)]),
157     Xv is Xn2+1,Yv2 is Yn2+1,
158     put_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xv,Yn2)],Conf1b),
159     put_assoc(vi,Conf1b,[1-(Xn2,Yn2),2-(Xn2,Yv2)],Conf2).
160
161 /*jaune1 gauche */ 
162 glissement(ja,g,Conf1,Conf2,Xn1,Yn1):-
163     gen_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
164     gen_assoc(vi,Conf1,[1-(Xv,Yn1),2-(Xv,Yv2)]),
165     Xv is Xn1-1,Yv2 is Yn1+1,
166     put_assoc(ja,Conf1,[1-(Xv,Yn1),2-(Xn2,Yn2)],Conf1b),
167     put_assoc(vi,Conf1b,[1-(Xn1,Yn1),2-(Xn1,Yv2)],Conf2).
168
169 /*jaune2 gauche */ 
170 glissement(ja,g,Conf1,Conf2,Xn2,Yn2):-
171     gen_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
172     gen_assoc(vi,Conf1,[1-(Xv,Yn2),2-(Xv,Yv2)]),
173     Xv is Xn2-1,Yv2 is Yn2+1,
174     ordonne((Xv,Yn2),(Xn1,Yn1),Ja1,Ja2),
175     put_assoc(ja,Conf1,[1-Ja1,2-Ja2],Conf1b),
176     put_assoc(vi,Conf1b,[1-(Xn2,Yn2),2-(Xn2,Yv2)],Conf2).
177
178 /*jaune1 bas */ 
179 glissement(ja,b,Conf1,Conf2,Xn1,Yn1):-
180     gen_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
181     gen_assoc(vi,Conf1,[1-(Xn1,Yv1),2-Nv2]),
182     Yn1p is Yn1+1,Yv1 is Yn1+2,
183     put_assoc(ja,Conf1,[1-(Xn1,Yn1p),2-(Xn2,Yn2)],Conf1b),
184     put_assoc(vi,Conf1b,[1-(Xn1,Yn1),2-Nv2],Conf2).
185
186 /*jaune1 bas */ 
187 glissement(ja,b,Conf1,Conf2,Xn1,Yn1):-
188     gen_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
189     gen_assoc(vi,Conf1,[1-Nv1,2-(Xn1,Yv1)]),
190     Yn1p is Yn1+1,Yv1 is Yn1+2,
191     put_assoc(ja,Conf1,[1-(Xn1,Yn1p),2-(Xn2,Yn2)],Conf1b),
192     put_assoc(vi,Conf1b,[1-Nv1,2-(Xn1,Yn1)],Conf2).
193
194 /*jaune2 bas */ 
195 glissement(ja,b,Conf1,Conf2,Xn2,Yn2):-
196     gen_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
197     gen_assoc(vi,Conf1,[1-(Xn2,Yv1),2-Nv2]),
198     Yn2p is Yn2+1,Yv1 is Yn2+2,
199     put_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2p)],Conf1b),
200     put_assoc(vi,Conf1b,[1-(Xn2,Yn2),2-Nv2],Conf2).
201
202 /*jaune2 bas */ 
203 glissement(ja,b,Conf1,Conf2,Xn2,Yn2):-
204     gen_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
205     gen_assoc(vi,Conf1,[1-Nv1,2-(Xn2,Yv2)]),
206     Yn2p is Yn2+1,Yv2 is Yn2+2,
207     put_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2p)],Conf1b),
208     put_assoc(vi,Conf1b,[1-Nv1,2-(Xn2,Yn2)],Conf2).
209
210 /*jaune1 haut */ 
211 glissement(ja,h,Conf1,Conf2,Xn1,Yn1):-
212     gen_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
213     gen_assoc(vi,Conf1,[1-(Xn1,Yv1),2-Nv2]),
214     Yv1p is Yn1+1,Yv1 is Yn1-1,
215     put_assoc(ja,Conf1,[1-(Xn1,Yv1),2-(Xn2,Yn2)],Conf1h),
216     put_assoc(vi,Conf1h,[1-(Xn1,Yv1p),2-Nv2],Conf2).
217
218 /*jaune1 haut */ 
219 glissement(ja,h,Conf1,Conf2,Xn1,Yn1):-
220     gen_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
221     gen_assoc(vi,Conf1,[1-Nv1,2-(Xn1,Yv1)]),
222     Yv1p is Yn1+1,Yv1 is Yn1-1,
223     put_assoc(ja,Conf1,[1-(Xn1,Yv1),2-(Xn2,Yn2)],Conf1h),
224     put_assoc(vi,Conf1h,[1-Nv1,2-(Xn1,Yv1p)],Conf2).
225
226 /*jaune2 haut */ 
227 glissement(ja,h,Conf1,Conf2,Xn2,Yn2):-
228     gen_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
229     gen_assoc(vi,Conf1,[1-(Xn2,Yv1),2-Nv2]),
230     Yv1p is Yn2+1,Yv1 is Yn2-1,
231     put_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yv1)],Conf1h),
232     put_assoc(vi,Conf1h,[1-(Xn2,Yv1p),2-Nv2],Conf2).
233
234 /*jaune2 haut */ 
235 glissement(ja,h,Conf1,Conf2,Xn2,Yn2):-
236     gen_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yn2)]),
237     gen_assoc(vi,Conf1,[1-Nv1,2-(Xn2,Yv2)]),
238     Yv2p is Yn2+1,Yv2 is Yn2-1,
239     put_assoc(ja,Conf1,[1-(Xn1,Yn1),2-(Xn2,Yv2)],Conf1h),
240     put_assoc(vi,Conf1h,[1-Nv1,2-(Xn2,Yv2p)],Conf2).
241
242 /*blanc droite */
243 glissement(bl,d,Conf1,Conf2,Xb,Yb):-
244     gen_assoc(bl,Conf1,[1-(Xb,Yb)]),
245     gen_assoc(vi,Conf1,[1-(Xv1,Yb),2-Nv2]),
246     Xv1 is Xb +2,Xp is Xb+1,
247     put_assoc(bl,Conf1,[1-(Xp,Yb)],Conf1b),
248     put_assoc(vi,Conf1b,[1-(Xb,Yb),2-Nv2],Conf2).
249
250 /*blanc droite */
251 glissement(bl,d,Conf1,Conf2,Xb,Yb):-
252     gen_assoc(bl,Conf1,[1-(Xb,Yb)]),
253     gen_assoc(vi,Conf1,[1-(Xv1,Yv1),2-(Xv2,Yb)]),
254     Xv2 is Xb +2,Xp is Xb+1,
255     put_assoc(bl,Conf1,[1-(Xp,Yb)],Conf1b),
256     ordonne((Xv1,Yv1),(Xb,Yb),Nv1,Nv2),
257     put_assoc(vi,Conf1b,[1-Nv1,2-Nv2],Conf2).
258
259
260 /*blanc gauche */
261 glissement(bl,d,Conf1,Conf2,Xb,Yb):-
262     gen_assoc(bl,Conf1,[1-(Xb,Yb)]),
263     gen_assoc(vi,Conf1,[1-(Xv1,Yb),2-V2]),
264     Xv1 is Xb-1,Xp is Xb+1,
265     ordonne((Xp,Yb),V2,V1p,V2p),
266     put_assoc(bl,Conf1,[1-(Xv1,Yb)],Conf1b),
267     put_assoc(vi,Conf1b,[1-V1p,2-V2p],Conf2).
268
269
270 /*blanc bas */
271 glissement(bl,b,Conf1,Conf2,Xb,Yb):-
272     gen_assoc(bl,Conf1,[1-(Xb,Yb)]),
273     gen_assoc(vi,Conf1,[1-(Xb,Yv1),2-(Xv2,Yv1)]),
274     Yv1 is Yb+1, Xv2 is Xb +1,
275     put_assoc(bl,Conf1,[1-(Xb,Yv1)],Conf1b),
276     put_assoc(vi,Conf1b,[1-(Xb,Yb),2-(Xv2,Yb)],Conf2).
277
278 /*blanc haut */
279 glissement(bl,h,Conf1,Conf2,Xb,Yb):-
280     gen_assoc(bl,Conf1,[1-(Xb,Yb)]),
281     gen_assoc(vi,Conf1,[1-(Xb,Yv1),2-(Xv2,Yv1)]),
282     Yv1 is Yb-1, Xv2 is Xb +1,
283     put_assoc(bl,Conf1,[1-(Xb,Yv1)],Conf1b),
284     put_assoc(vi,Conf1b,[1-(Xb,Yb),2-(Xv2,Yb)],Conf2).
285
286 /*ma1 droite */
287 glissement(ma,d,Conf1,Conf2,Xm1,Ym1):-
288     gen_assoc(ma,Conf1,[1-(Xm1,Ym1),2-(Xm2,Ym2)]),
289     gen_assoc(vi,Conf1,[1-(Xv1,Ym1),2-Nv2]),
290     Xv1 is Xm1 +1,
291     ordonne((Xv1,Ym1),(Xm2,Ym2),Nm1,Nm2),
292     put_assoc(ma,Conf1,[1-Nm1,2-Nm2],Conf1b),
293     put_assoc(vi,Conf1b,[1-(Xm1,Ym1),2-Nv2],Conf2).
294
295 /*ma1 droite */
296 glissement(ma,d,Conf1,Conf2,Xm1,Ym1):-
297     gen_assoc(ma,Conf1,[1-(Xm1,Ym1),2-(Xm2,Ym2)]),
298     gen_assoc(vi,Conf1,[1-(Xv1,Yv1),2-(Xv2,Ym1)]),
299     Xv2 is Xm1 +1,
300     ordonne((Xv2,Ym1),(Xm2,Ym2),Nm1,Nm2),
301     put_assoc(ma,Conf1,[1-Nm1,2-Nm2],Conf1b),
302     ordonne((Xv1,Yv1),(Xm1,Ym1),Nv1,Nv2),
303     put_assoc(vi,Conf1b,[1-Nv1,2-Nv2],Conf2).
304
305 /*ma2 droite */
306 glissement(ma,d,Conf1,Conf2,Xm2,Ym2):-
307     gen_assoc(ma,Conf1,[1-(Xm1,Ym1),2-(Xm2,Ym2)]),
308     gen_assoc(vi,Conf1,[1-(Xv1,Ym2),2-Nv2]),
309     Xv1 is Xm2 +1,
310     put_assoc(ma,Conf1,[1-(Xm1,Ym1),2-(Xv1,Ym2)],Conf1b),
311     put_assoc(vi,Conf1b,[1-(Xm2,Ym2),2-Nv2],Conf2).
312
313 /*ma2 droite */
314 glissement(ma,d,Conf1,Conf2,Xm2,Ym2):-
315     gen_assoc(ma,Conf1,[1-M1,2-(Xm2,Ym2)]),
316     gen_assoc(vi,Conf1,[1-Nv1,2-(Xv2,Ym2)]),
317     Xv2 is Xm2 +1,
318     put_assoc(ma,Conf1,[1-M1,2-(Xv2,Ym2)],Conf1b),
319     ordonne(Nv1,(Xm2,Ym2),Nv1,Nv2),
320     put_assoc(vi,Conf1b,[1-Nv1,2-Nv2],Conf2).
321     
322
323 /*ma1 gauche */
324 glissement(ma,g,Conf1,Conf2,Xm1,Ym1):-
325     gen_assoc(ma,Conf1,[1-(Xm1,Ym1),2-M2]),
326     gen_assoc(vi,Conf1,[1-(Xv1,Ym1),2-Nv2]),
327     Xv1 is Xm1 -1,
328     put_assoc(ma,Conf1,[1-(Xv1,Ym1),2-M2],Conf1b),
329     ordonne((Xm1,Ym1),Nv2,Nv1p,Nv2p),
330     put_assoc(vi,Conf1b,[1-Nv1p,2-Nv2p],Conf2).
331
332 /*ma1 gauche */
333 glissement(ma,g,Conf1,Conf2,Xm1,Ym1):-
334     gen_assoc(ma,Conf1,[1-(Xm1,Ym1),2-M2]),
335     gen_assoc(vi,Conf1,[1-V1,2-(Xv2,Ym1)]),
336     Xv2 is Xm1 -1,
337     put_assoc(ma,Conf1,[1-(Xv2,Ym1),2-M2],Conf1b),
338     put_assoc(vi,Conf1b,[1-V1,2-(Xm1,Ym1)],Conf2).
339
340 /*ma2 gauche */
341 glissement(ma,g,Conf1,Conf2,Xm2,Ym2):-
342     gen_assoc(ma,Conf1,[1-M1,2-(Xm2,Ym2)]),
343     gen_assoc(vi,Conf1,[1-(Xv1,Ym2),2-V2]),
344     Xv1 is Xm2 -1,
345     ordonne(M1,(Xv1,Ym2),M1p,M2p),
346     put_assoc(ma,Conf1,[1-M1p,2-M2p],Conf1b),
347     ordonne((Xm2,Ym2),V2,V1p,V2p),
348     put_assoc(vi,Conf1b,[1-V1p,2-V2p],Conf2).
349
350 /*ma2 gauche */
351 glissement(ma,g,Conf1,Conf2,Xm2,Ym2):-
352     gen_assoc(ma,Conf1,[1-M1,2-(Xm2,Ym2)]),
353     gen_assoc(vi,Conf1,[1-V1,2-(Xv2,Ym2)]),
354     Xv2 is Xm2 -1,
355     ordonne(M1,(Xv2,Ym2),M1p,M2p),
356     put_assoc(ma,Conf1,[1-M1p,2-M2p],Conf1b),
357     put_assoc(vi,Conf1b,[1-V1,2-(Xm2,Ym2)],Conf2).
358
359
360 /*ma1 bas */
361 glissement(ma,b,Conf1,Conf2,Xm1,Ym1):-
362     gen_assoc(ma,Conf1,[1-(Xm1,Ym1),2-M2]),
363     gen_assoc(vi,Conf1,[1-(Xm1,Yv1),2-Nv2]),
364     Yv1 is Ym1 +1,
365     put_assoc(ma,Conf1,[1-(Xm1,Yv1),2-M2],Conf1b),
366     put_assoc(vi,Conf1b,[1-(Xm1,Ym1),2-Nv2],Conf2).
367
368 /*ma1 bas */
369 glissement(ma,b,Conf1,Conf2,Xm1,Ym1):-
370     gen_assoc(ma,Conf1,[1-(Xm1,Ym1),2-M2]),
371     gen_assoc(vi,Conf1,[1-V1,2-(Xm1,Yv2)]),
372     Yv2 is Ym1 +1,
373     put_assoc(ma,Conf1,[1-(Xm1,Yv2),2-M2],Conf1b),
374     put_assoc(vi,Conf1b,[1-V1,2-(Xm1,Ym1)],Conf2).
375
376 /*ma2 bas */
377 glissement(ma,b,Conf1,Conf2,Xm2,Ym2):-
378     gen_assoc(ma,Conf1,[1-M1,2-(Xm2,Ym2)]),
379     gen_assoc(vi,Conf1,[1-(Xm2,Yv1),2-V2]),
380     Yv1 is Ym2 +1,
381     put_assoc(ma,Conf1,[1-M1,2-(Xm2,Yv1)],Conf1b),
382     put_assoc(vi,Conf1b,[1-(Xm2,Ym2),2-V2],Conf2).
383
384 /*ma2 bas */
385 glissement(ma,b,Conf1,Conf2,Xm2,Ym2):-
386     gen_assoc(ma,Conf1,[1-M1,2-(Xm2,Ym2)]),
387     gen_assoc(vi,Conf1,[1-V1,2-(Xm2,Yv2)]),
388     Yv2 is Ym2 +1,
389     put_assoc(ma,Conf1,[1-M1,2-(Xm2,Yv2)],Conf1b),
390     put_assoc(vi,Conf1b,[1-V1,2-(Xm2,Ym2)],Conf2).
391     
392 /*ma1 haut */
393 glissement(ma,h,Conf1,Conf2,Xm1,Ym1):-
394     gen_assoc(ma,Conf1,[1-(Xm1,Ym1),2-M2]),
395     gen_assoc(vi,Conf1,[1-(Xm1,Yv1),2-V2]),
396     Yv1 is Ym1 -1,
397     put_assoc(ma,Conf1,[1-(Xm1,Yv1),2-M2],Conf1b),
398     put_assoc(vi,Conf1b,[1-(Xm1,Ym1),2-V2],Conf2).
399
400 /*ma1 haut */
401 glissement(ma,h,Conf1,Conf2,Xm1,Ym1):-
402     gen_assoc(ma,Conf1,[1-(Xm1,Ym1),2-M2]),
403     gen_assoc(vi,Conf1,[1-V1,2-(Xm1,Yv2)]),
404     Yv2 is Ym1 -1,
405     put_assoc(ma,Conf1,[1-(Xm1,Yv2),2-M2],Conf1b),
406     put_assoc(vi,Conf1b,[1-V1,2-(Xm1,Ym1)],Conf2).
407
408 /*ma2 haut */
409 glissement(ma,h,Conf1,Conf2,Xm2,Ym2):-
410     gen_assoc(ma,Conf1,[1-M1,2-(Xm2,Ym2)]),
411     gen_assoc(vi,Conf1,[1-(Xm2,Yv1),2-V2]),
412     Yv1 is Ym2 -1,
413     put_assoc(ma,Conf1,[1-M1,2-(Xm2,Yv1)],Conf1b),
414     put_assoc(vi,Conf1b,[1-(Xm2,Ym2),2-V2],Conf2).
415
416 /*ma2 haut */
417 glissement(ma,h,Conf1,Conf2,Xm2,Ym2):-
418     gen_assoc(ma,Conf1,[1-M1,2-(Xm2,Ym2)]),
419     gen_assoc(vi,Conf1,[1-V1,2-(Xm2,Yv2)]),
420     Yv2 is Ym2 -1,
421     put_assoc(ma,Conf1,[1-M1,2-(Xm2,Yv2)],Conf1b),
422     put_assoc(vi,Conf1b,[1-V1,2-(Xm2,Ym2)],Conf2).
423
424 /**********Reste le bois ********/
425
426 /*Bois1 droite */
427 glissement(bo,d,Conf1,Conf2,Xm1,Ym1):-
428     gen_assoc(bo,Conf1,[1-(Xm1,Ym1),2-(Xm2,Ym2)]),
429     gen_assoc(vi,Conf1,[1-(Xv1,Ym1),2-Nv2]),
430     Xv1 is Xm1 +1,
431     ordonne((Xv1,Ym1),(Xm2,Ym2),Nm1,Nm2),
432     put_assoc(bo,Conf1,[1-Nm1,2-Nm2],Conf1b),
433     put_assoc(vi,Conf1b,[1-(Xm1,Ym1),2-Nv2],Conf2).
434
435 /*Bois1 droite */
436 glissement(bo,d,Conf1,Conf2,Xm1,Ym1):-
437     gen_assoc(bo,Conf1,[1-(Xm1,Ym1),2-(Xm2,Ym2)]),
438     gen_assoc(vi,Conf1,[1-(Xv1,Yv1),2-(Xv2,Ym1)]),
439     Xv2 is Xm1 +1,
440     ordonne((Xv2,Ym1),(Xm2,Ym2),Nm1,Nm2),
441     put_assoc(bo,Conf1,[1-Nm1,2-Nm2],Conf1b),
442     ordonne((Xv1,Yv1),(Xm1,Ym1),Nv1,Nv2),
443     put_assoc(vi,Conf1b,[1-Nv1,2-Nv2],Conf2).
444
445 /*Bois2 droite */
446 glissement(bo,d,Conf1,Conf2,Xm2,Ym2):-
447     gen_assoc(bo,Conf1,[1-(Xm1,Ym1),2-(Xm2,Ym2)]),
448     gen_assoc(vi,Conf1,[1-(Xv1,Ym2),2-Nv2]),
449     Xv1 is Xm2 +1,
450     put_assoc(bo,Conf1,[1-(Xm1,Ym1),2-(Xv1,Ym2)],Conf1b),
451     put_assoc(vi,Conf1b,[1-(Xm2,Ym2),2-Nv2],Conf2).
452
453 /*Bois2 droite */
454 glissement(bo,d,Conf1,Conf2,Xm2,Ym2):-
455     gen_assoc(bo,Conf1,[1-M1,2-(Xm2,Ym2)]),
456     gen_assoc(vi,Conf1,[1-Nv1,2-(Xv2,Ym2)]),
457     Xv2 is Xm2 +1,
458     put_assoc(bo,Conf1,[1-M1,2-(Xv2,Ym2)],Conf1b),
459     ordonne(Nv1,(Xm2,Ym2),Nv1,Nv2),
460     put_assoc(vi,Conf1b,[1-Nv1,2-Nv2],Conf2).
461     
462
463 /*Bois1 gauche */
464 glissement(bo,g,Conf1,Conf2,Xm1,Ym1):-
465     gen_assoc(bo,Conf1,[1-(Xm1,Ym1),2-M2]),
466     gen_assoc(vi,Conf1,[1-(Xv1,Ym1),2-Nv2]),
467     Xv1 is Xm1 -1,
468     put_assoc(bo,Conf1,[1-(Xv1,Ym1),2-M2],Conf1b),
469     ordonne((Xm1,Ym1),Nv2,Nv1p,Nv2p),
470     put_assoc(vi,Conf1b,[1-Nv1p,2-Nv2p],Conf2).
471
472 /*Bois1 gauche */
473 glissement(bo,g,Conf1,Conf2,Xm1,Ym1):-
474     gen_assoc(bo,Conf1,[1-(Xm1,Ym1),2-M2]),
475     gen_assoc(vi,Conf1,[1-V1,2-(Xv2,Ym1)]),
476     Xv2 is Xm1 -1,
477     put_assoc(bo,Conf1,[1-(Xv2,Ym1),2-M2],Conf1b),
478     put_assoc(vi,Conf1b,[1-V1,2-(Xm1,Ym1)],Conf2).
479
480 /*Bois2 gauche */
481 glissement(bo,g,Conf1,Conf2,Xm2,Ym2):-
482     gen_assoc(bo,Conf1,[1-M1,2-(Xm2,Ym2)]),
483     gen_assoc(vi,Conf1,[1-(Xv1,Ym2),2-V2]),
484     Xv1 is Xm2 -1,
485     ordonne(M1,(Xv1,Ym2),M1p,M2p),
486     put_assoc(bo,Conf1,[1-M1p,2-M2p],Conf1b),
487     ordonne((Xm2,Ym2),V2,V1p,V2p),
488     put_assoc(vi,Conf1b,[1-V1p,2-V2p],Conf2).
489
490 /*Bois2 gauche */
491 glissement(bo,g,Conf1,Conf2,Xm2,Ym2):-
492     gen_assoc(bo,Conf1,[1-M1,2-(Xm2,Ym2)]),
493     gen_assoc(vi,Conf1,[1-V1,2-(Xv2,Ym2)]),
494     Xv2 is Xm2 -1,
495     ordonne(M1,(Xv2,Ym2),M1p,M2p),
496     put_assoc(bo,Conf1,[1-M1p,2-M2p],Conf1b),
497     put_assoc(vi,Conf1b,[1-V1,2-(Xm2,Ym2)],Conf2).
498
499
500 /*Bois1 bas */
501 glissement(bo,b,Conf1,Conf2,Xm1,Ym1):-
502     gen_assoc(bo,Conf1,[1-(Xm1,Ym1),2-M2]),
503     gen_assoc(vi,Conf1,[1-(Xm1,Yv1),2-Nv2]),
504     Yv1 is Ym1 +1,
505     put_assoc(bo,Conf1,[1-(Xm1,Yv1),2-M2],Conf1b),
506     put_assoc(vi,Conf1b,[1-(Xm1,Ym1),2-Nv2],Conf2).
507
508 /*Bois1 bas */
509 glissement(bo,b,Conf1,Conf2,Xm1,Ym1):-
510     gen_assoc(bo,Conf1,[1-(Xm1,Ym1),2-M2]),
511     gen_assoc(vi,Conf1,[1-V1,2-(Xm1,Yv2)]),
512     Yv2 is Ym1 +1,
513     put_assoc(bo,Conf1,[1-(Xm1,Yv2),2-M2],Conf1b),
514     put_assoc(vi,Conf1b,[1-V1,2-(Xm1,Ym1)],Conf2).
515
516 /*Bois2 bas */
517 glissement(bo,b,Conf1,Conf2,Xm2,Ym2):-
518     gen_assoc(bo,Conf1,[1-M1,2-(Xm2,Ym2)]),
519     gen_assoc(vi,Conf1,[1-(Xm2,Yv1),2-V2]),
520     Yv1 is Ym2 +1,
521     put_assoc(bo,Conf1,[1-M1,2-(Xm2,Yv1)],Conf1b),
522     put_assoc(vi,Conf1b,[1-(Xm2,Ym2),2-V2],Conf2).
523
524 /*Bois2 bas */
525 glissement(bo,b,Conf1,Conf2,Xm2,Ym2):-
526     gen_assoc(bo,Conf1,[1-M1,2-(Xm2,Ym2)]),
527     gen_assoc(vi,Conf1,[1-V1,2-(Xm2,Yv2)]),
528     Yv2 is Ym2 +1,
529     put_assoc(bo,Conf1,[1-M1,2-(Xm2,Yv2)],Conf1b),
530     put_assoc(vi,Conf1b,[1-V1,2-(Xm2,Ym2)],Conf2).
531     
532 /*Bois1 haut */
533 glissement(bo,h,Conf1,Conf2,Xm1,Ym1):-
534     gen_assoc(bo,Conf1,[1-(Xm1,Ym1),2-M2]),
535     gen_assoc(vi,Conf1,[1-(Xm1,Yv1),2-V2]),
536     Yv1 is Ym1 -1,
537     put_assoc(bo,Conf1,[1-(Xm1,Yv1),2-M2],Conf1b),
538     put_assoc(vi,Conf1b,[1-(Xm1,Ym1),2-V2],Conf2).
539
540 /*Bois1 haut */
541 glissement(bo,h,Conf1,Conf2,Xm1,Ym1):-
542     gen_assoc(bo,Conf1,[1-(Xm1,Ym1),2-M2]),
543     gen_assoc(vi,Conf1,[1-V1,2-(Xm1,Yv2)]),
544     Yv2 is Ym1 -1,
545     put_assoc(bo,Conf1,[1-(Xm1,Yv2),2-M2],Conf1b),
546     put_assoc(vi,Conf1b,[1-V1,2-(Xm1,Ym1)],Conf2).
547
548 /*Bois2 haut */
549 glissement(bo,h,Conf1,Conf2,Xm2,Ym2):-
550     gen_assoc(bo,Conf1,[1-M1,2-(Xm2,Ym2)]),
551     gen_assoc(vi,Conf1,[1-(Xm2,Yv1),2-V2]),
552     Yv1 is Ym2 -1,
553     put_assoc(bo,Conf1,[1-M1,2-(Xm2,Yv1)],Conf1b),
554     put_assoc(vi,Conf1b,[1-(Xm2,Ym2),2-V2],Conf2).
555
556 /*Bois2 haut */
557 glissement(bo,h,Conf1,Conf2,Xm2,Ym2):-
558     gen_assoc(bo,Conf1,[1-M1,2-(Xm2,Ym2)]),
559     gen_assoc(vi,Conf1,[1-V1,2-(Xm2,Yv2)]),
560     Yv2 is Ym2 -1,
561     put_assoc(bo,Conf1,[1-M1,2-(Xm2,Yv2)],Conf1b),
562     put_assoc(vi,Conf1b,[1-V1,2-(Xm2,Ym2)],Conf2).
563     
564
565 retour(L,Col,d,L,Cp,g):-
566     Col is Cp-1.
567 retour(L,Col,g,L,Cp,d):-
568     Col is Cp+1.
569 retour(Lig,C,h,Lp,C,b):-
570     Lig is Lp+1.
571     retour(Lig,C,b,Lp,C,h):-
572     Lig is Lp-1.
573
574
575 gl_time(P,D,Confa,Confb):-
576     get_time(T2),
577     glissement(P,D,Confa,Confb),
578     get_time(T3),
579     DT3 is T3 - T2,
580     write('depl : '),writeln(DT3).
581     
582  
583
584
585
586     /* Tous les successeurs d une configuration */
587 successeurs(Confa-Chemins,L):-
588     findall(
589         Confb-[((Lig,Col),D)|Chemins],
590         gl_ok(_,D,Confa,Confb,Lig,Col),
591         L).
592
593 successeurs_liste(L,Sl):-
594     maplist(successeurs,L,Lp),
595     flatten(Lp,Lpp),
596     list_to_assoc(Lpp,A),
597     assoc_to_list(A,Sl).
598
599
600
601 /* regarde si le premier parametre appartient 
602      \81à la liste donn\81é en second parametre. Si c est le cas,
603     retourne le chemin */
604
605
606
607
608
609
610 appartient(Conf1-_,[Conf1-_|_]):-!.
611 appartient(Conf1-C,[_|L]):-
612     appartient(Conf1-C,L).
613
614
615 difference([],_,[]).
616 difference([El|L1],L2,Res):-
617     appartient(El,L2),
618     !,
619     difference(L1,L2,Res).
620 difference([El|L1],L2,[El|Res]):-
621     difference(L1,L2,Res).
622
623
624
625
626
627
628 but([Conf-Chemin|_],Chemin):-final(Conf),!.
629 but([_|L],Chemin):-but(L,Chemin).
630
631
632 largeur(Atraiter,_,_,Res):-
633     but(Atraiter,Res),
634     !.
635 largeur(Atraiter,Visites,C,Res):-
636     Cp is C+1,
637     write('boucle'), writeln(C),
638     get_time(T0),
639     successeurs_liste(Atraiter,Succ),
640     length(Succ,Taille),
641     write('taille succ : '),writeln(Taille),
642     get_time(T1),
643     DT1 is T1 - T0,
644     append(Atraiter,Visites,Visites2),
645     get_time(T2),
646     difference(Succ,Visites2,Atraiter2),
647     get_time(T3),
648     DT3 is T3 - T2,
649     write('successeur : '),writeln(DT1),
650     write('difference : '),writeln(DT3),
651     largeur(Atraiter2,Visites2,Cp,Res).
652
653 resoud(Res):-
654     init(X),
655     largeur([X-[]],[],0,Res).
656
657
658 /*trad(El-L,El-A):-
659     list_to_assoc(L,A).
660  */   
661     
662 init(X):-
663     list_to_assoc(
664             [
665              ja-[1-(0,0),2-(3,0)],       
666              ro-[1-(1,0)],
667              no-[1-(0,2),2-(3,2)],
668              bl-[1-(1,2)],
669              ma-[1-(0,4),2-(3,4)],
670              bo-[1-(1,3),2-(2,3)],
671              vi-[1-(1,4),2-(2,4)]],
672             X).
673
674 final(X):-    
675     gen_assoc(no,X,[1-(1,3),2-(3,3)]),
676     gen_assoc(bl,X,[1-(1,2)]),
677     gen_assoc(ma,X,[1-(0,3),_]).
678 /*
679 final(X):-    
680     gen_assoc(no,X,[1-(1,3),2-(2,3)]),
681
682     
683
684 */
685
686
687
688
689
690