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

Private GIT Repository
t
[cours-maths-dis.git] / tpProlog / anerouge / anerouge_distinct.pl
1 /* accesseurs sur ligne et colonne*/
2
3 colonne(1,[A,_,_,_],A).
4 colonne(2,[_,A,_,_],A).
5 colonne(3,[_,_,A,_],A).
6 colonne(4,[_,_,_,A],A).
7
8 ligne(1,[A,_,_,_,_],A).
9 ligne(2,[_,A,_,_,_],A).
10 ligne(3,[_,_,A,_,_],A).
11 ligne(4,[_,_,_,A,_],A).
12 ligne(5,[_,_,_,_,A],A).
13
14
15
16
17
18 /* retourne le contenu "Contenu_case" de la case  
19 situé à la colonne "Col" et la ligne "Lig" du jeux en cours
20 "Contenu_jeu" */
21  
22 case(Lig,Col,Conf,Contenu) :- 
23     ligne(Lig,Conf,Ligne),
24     colonne(Col,Ligne,Contenu).
25
26
27 changeContenuColonne(1,X,[_,B,C,D],[X,B,C,D]).
28 changeContenuColonne(2,X,[A,_,C,D],[A,X,C,D]).
29 changeContenuColonne(3,X,[A,B,_,D],[A,B,X,D]).
30 changeContenuColonne(4,X,[A,B,C,_],[A,B,C,X]).
31
32
33 changeContenuLigne(1,X,[_,B,C,D,E],[X,B,C,D,E]).
34 changeContenuLigne(2,X,[A,_,C,D,E],[A,X,C,D,E]).
35 changeContenuLigne(3,X,[A,B,_,D,E],[A,B,X,D,E]).
36 changeContenuLigne(4,X,[A,B,C,_,E],[A,B,C,X,E]).
37 changeContenuLigne(5,X,[A,B,C,D,_],[A,B,C,D,X]).
38
39
40
41 changeContenu(Conf1,Piece,Y,X,Conf2):-
42     ligne(Y,Conf1,Ligne),
43     changeContenuColonne(X,Piece,Ligne,Lignep),
44     changeContenuLigne(Y,Lignep,Conf1,Conf2).
45
46
47
48 init([
49     [jaunea1,rouge1,rouge2,jauneb1],
50     [jaunea2,rouge3,rouge4,jauneb2],
51     [noira1,blanc1,blanc2,noirb1],
52     [noira2,bois1,bois2,noirb2],
53     [marron1,vide1,vide1,marron2]]).
54     
55
56
57 /*
58 final([
59     [jaune1,rouge1,rouge2,jaune1],
60     [jaune2,rouge3,rouge4,jaune2],
61     [noir1,blanc1,blanc2,noir1],
62     [noir2,bois,vide,noir2],
63     [marron,vide,bois,marron]]).
64
65     
66 final([
67     [_,_,_,_],
68     [_,_,_,_],
69     [_,_,_,_],
70     [_,rouge1,rouge2,_],
71     [_,rouge3,rouge4,_]]).
72
73 */
74
75
76 final([
77     [jaune1,rouge1,rouge2,jaune1],
78     [jaune2,rouge3,rouge4,jaune2],
79     [_,_,_,_],
80     [_,noir1,noir1,_],
81     [_,noir2,noir2,_]]).
82
83
84
85
86 /* deplacement horizontal  */
87 glissementHOK(rouge1,Conf1,Conf2):-
88   case(Lig,Col,Conf1,rouge1),
89   case(Lig,Colpp,Conf1,vide),
90   case(Ligp,Colpp,Conf1,vide),
91   Ligp is Lig+1,
92   Colp is Col+1,
93   Colpp is Col+2,
94   changeContenu(Conf1,rouge1,Lig,Colp,Conf1a),
95   changeContenu(Conf1a,rouge2,Lig,Colpp,Conf1b),
96   changeContenu(Conf1b,vide,Lig,Col,Conf1c),
97   changeContenu(Conf1c,rouge3,Ligp,Colp,Conf1d),
98   changeContenu(Conf1d,rouge4,Ligp,Colpp,Conf1e),
99   changeContenu(Conf1e,vide,Ligp,Col,Conf2).
100
101 glissementHOK(noir1,Conf1,Conf2):-
102   case(Lig,Col,Conf1,noir1),
103   case(Lig,Colp,Conf1,vide),
104   case(Ligp,Colp,Conf1,vide),
105   Ligp is Lig+1,
106   Colp is Col+1,
107   changeContenu(Conf1,noir1,Lig,Colp,Conf1a),
108   changeContenu(Conf1a,noir2,Ligp,Colp,Conf1b),
109   changeContenu(Conf1b,vide,Lig,Col,Conf1c),
110   changeContenu(Conf1c,vide,Ligp,Col,Conf2).
111
112
113 glissementHOK(jaune1,Conf1,Conf2):-
114   case(Lig,Col,Conf1,jaune1),
115   case(Lig,Colp,Conf1,vide),
116   case(Ligp,Colp,Conf1,vide),
117   Ligp is Lig+1,
118   Colp is Col+1,
119   changeContenu(Conf1,jaune1,Lig,Colp,Conf1a),
120   changeContenu(Conf1a,jaune2,Ligp,Colp,Conf1b),
121   changeContenu(Conf1b,vide,Lig,Col,Conf1c),
122   changeContenu(Conf1c,vide,Ligp,Col,Conf2).
123
124 glissementHOK(blanc1,Conf1,Conf2):-
125   case(Lig,Col,Conf1,blanc1),
126   case(Lig,Colpp,Conf1,vide),
127   Colpp is Col+2,
128   Colp is Col+1,
129   changeContenu(Conf1,blanc1,Lig,Colp,Conf1a),
130   changeContenu(Conf1a,blanc2,Lig,Colpp,Conf1b),
131   changeContenu(Conf1b,vide,Lig,Col,Conf2).
132
133 glissementHOK(bois,Conf1,Conf2):-
134   case(Lig,Col,Conf1,bois),
135   case(Lig,Colp,Conf1,vide),
136   Colp is Col+1,
137   changeContenu(Conf1,bois,Lig,Colp,Conf1a),
138   changeContenu(Conf1a,vide,Lig,Col,Conf2).
139
140 glissementHOK(marron,Conf1,Conf2):-
141   case(Lig,Col,Conf1,marron),
142   case(Lig,Colp,Conf1,vide),
143   Colp is Col+1,
144   changeContenu(Conf1,marron,Lig,Colp,Conf1a),
145   changeContenu(Conf1a,vide,Lig,Col,Conf2).
146
147 /***** Copier-coller   a simplifier ***/
148
149 glissementHOK(rouge1,Conf1,Conf2):-
150   case(Lig,Col,Conf1,rouge1),
151   case(Lig,Colm,Conf1,vide),
152   case(Ligp,Colm,Conf1,vide),
153   Ligp is Lig+1,
154   Colm is Col-1,
155   Colp is Col+1,
156   changeContenu(Conf1,rouge1,Lig,Colm,Conf1a),
157   changeContenu(Conf1a,rouge2,Lig,Col,Conf1b),
158   changeContenu(Conf1b,vide,Lig,Colp,Conf1c),
159   changeContenu(Conf1c,rouge3,Ligp,Colm,Conf1d),
160   changeContenu(Conf1d,rouge4,Ligp,Col,Conf1e),
161   changeContenu(Conf1e,vide,Ligp,Colp,Conf2).
162
163
164 glissementHOK(noir1,Conf1,Conf2):-
165   case(Lig,Col,Conf1,noir1),
166   case(Lig,Colp,Conf1,vide),
167   case(Ligp,Colp,Conf1,vide),
168   Ligp is Lig+1,
169   Colp is Col-1,
170   changeContenu(Conf1,noir1,Lig,Colp,Conf1a),
171   changeContenu(Conf1a,noir2,Ligp,Colp,Conf1b),
172   changeContenu(Conf1b,vide,Lig,Col,Conf1c),
173   changeContenu(Conf1c,vide,Ligp,Col,Conf2).
174
175
176 glissementHOK(jaune1,Conf1,Conf2):-
177   case(Lig,Col,Conf1,jaune1),
178   case(Lig,Colp,Conf1,vide),
179   case(Ligp,Colp,Conf1,vide),
180   Ligp is Lig+1,
181   Colp is Col-1,
182   changeContenu(Conf1,jaune1,Lig,Colp,Conf1a),
183   changeContenu(Conf1a,jaune2,Ligp,Colp,Conf1b),
184   changeContenu(Conf1b,vide,Lig,Col,Conf1c),
185   changeContenu(Conf1c,vide,Ligp,Col,Conf2).
186
187
188 glissementHOK(blanc1,Conf1,Conf2):-
189   case(Lig,Col,Conf1,blanc1),
190   case(Lig,Colm,Conf1,vide),
191   Colp is Col+1,
192   Colm is Col-1,
193   changeContenu(Conf1,blanc1,Lig,Colm,Conf1a),
194   changeContenu(Conf1a,blanc2,Lig,Col,Conf1b),
195   changeContenu(Conf1b,vide,Lig,Colp,Conf2).
196
197 glissementHOK(bois,Conf1,Conf2):-
198   case(Lig,Col,Conf1,bois),
199   case(Lig,Colm,Conf1,vide),
200   Colm is Col-1,
201   changeContenu(Conf1,bois,Lig,Colm,Conf1a),
202   changeContenu(Conf1a,vide,Lig,Col,Conf2).
203
204 glissementHOK(marron,Conf1,Conf2):-
205   case(Lig,Col,Conf1,marron),
206   case(Lig,Colm,Conf1,vide),
207   Colm is Col-1,
208   changeContenu(Conf1,marron,Lig,Colm,Conf1a),
209   changeContenu(Conf1a,vide,Lig,Col,Conf2).
210
211
212 /** fin du copier-coller **/
213
214
215
216 /** déplacement vertical **/
217  
218 glissementVOK(rouge1,Conf1,Conf2):-
219   case(Lig,Col,Conf1,rouge1),
220   case(Ligpp,Col,Conf1,vide),
221   case(Ligpp,Colp,Conf1,vide),
222   Ligp is Lig+1,
223   Ligpp is Lig+2,
224   Colp is Col+1,
225   changeContenu(Conf1,rouge1,Ligp,Col,Conf1a),
226   changeContenu(Conf1a,rouge2,Ligp,Colp,Conf1b),
227   changeContenu(Conf1b,vide,Lig,Col,Conf1c),
228   changeContenu(Conf1c,rouge3,Ligpp,Col,Conf1d),
229   changeContenu(Conf1d,rouge4,Ligpp,Colp,Conf1e),
230   changeContenu(Conf1e,vide,Lig,Colp,Conf2).
231
232 glissementVOK(noir1,Conf1,Conf2):-
233   case(Lig,Col,Conf1,noir1),
234   case(Ligpp,Col,Conf1,vide),
235   Ligp is Lig+1,
236   Ligpp is Lig+2,
237   changeContenu(Conf1,noir1,Ligp,Col,Conf1a),
238   changeContenu(Conf1a,noir2,Ligpp,Col,Conf1b),
239   changeContenu(Conf1b,vide,Lig,Col,Conf2).
240
241 glissementVOK(jaune1,Conf1,Conf2):-
242   case(Lig,Col,Conf1,jaune1),
243   case(Ligpp,Col,Conf1,vide),
244   Ligp is Lig+1,
245   Ligpp is Lig+2,
246   changeContenu(Conf1,jaune1,Ligp,Col,Conf1a),
247   changeContenu(Conf1a,jaune2,Ligpp,Col,Conf1b),
248   changeContenu(Conf1b,vide,Lig,Col,Conf2).
249
250 glissementVOK(blanc1,Conf1,Conf2):-
251   case(Lig,Col,Conf1,blanc1),
252   case(Ligp,Col,Conf1,vide),
253   case(Ligp,Colp,Conf1,vide),
254   Ligp is Lig+1,
255   Colp is Col+1,
256   changeContenu(Conf1,blanc1,Ligp,Col,Conf1a),
257   changeContenu(Conf1a,blanc2,Ligp,Colp,Conf1b),
258   changeContenu(Conf1b,vide,Lig,Col,Conf1c),
259   changeContenu(Conf1c,vide,Lig,Colp,Conf2).
260
261 glissementVOK(bois,Conf1,Conf2):-
262   case(Lig,Col,Conf1,bois),
263   case(Ligp,Col,Conf1,vide),
264   Ligp is Lig+1,
265   changeContenu(Conf1,bois,Ligp,Col,Conf1a),
266   changeContenu(Conf1a,vide,Lig,Col,Conf2).
267
268
269 glissementVOK(marron,Conf1,Conf2):-
270   case(Lig,Col,Conf1,marron),
271   case(Ligp,Col,Conf1,vide),
272   Ligp is Lig+1,
273   changeContenu(Conf1,marron,Ligp,Col,Conf1a),
274   changeContenu(Conf1a,vide,Lig,Col,Conf2).
275
276 /***** copier coller de deplacement vertical   **/
277  
278 glissementVOK(rouge1,Conf1,Conf2):-
279   case(Lig,Col,Conf1,rouge1),
280   case(Ligm,Col,Conf1,vide),
281   case(Ligm,Colp,Conf1,vide),
282   Ligp is Lig+1,
283   Ligm is Lig-1,
284   Colp is Col+1,
285   changeContenu(Conf1,rouge1,Ligm,Col,Conf1a),
286   changeContenu(Conf1a,rouge2,Ligm,Colp,Conf1b),
287   changeContenu(Conf1b,vide,Ligp,Col,Conf1c),
288   changeContenu(Conf1c,rouge3,Lig,Col,Conf1d),
289   changeContenu(Conf1d,rouge4,Lig,Colp,Conf1e),
290   changeContenu(Conf1e,vide,Ligp,Colp,Conf2).
291
292 glissementVOK(noir1,Conf1,Conf2):-
293   case(Lig,Col,Conf1,noir1),
294   case(Ligm,Col,Conf1,vide),
295   Ligp is Lig+1,
296   Ligm is Lig-1,
297   changeContenu(Conf1,noir1,Ligm,Col,Conf1a),
298   changeContenu(Conf1a,noir2,Lig,Col,Conf1b),
299   changeContenu(Conf1b,vide,Ligp,Col,Conf2).
300
301 glissementVOK(jaune1,Conf1,Conf2):-
302   case(Lig,Col,Conf1,jaune1),
303   case(Ligm,Col,Conf1,vide),
304   Ligp is Lig+1,
305   Ligm is Lig-1,
306   changeContenu(Conf1,jaune1,Ligm,Col,Conf1a),
307   changeContenu(Conf1a,jaune2,Lig,Col,Conf1b),
308   changeContenu(Conf1b,vide,Ligp,Col,Conf2).
309
310 glissementVOK(blanc1,Conf1,Conf2):-
311   case(Lig,Col,Conf1,blanc1),
312   case(Ligm,Col,Conf1,vide),
313   case(Ligm,Colp,Conf1,vide),
314   Ligm is Lig-1,
315   Colp is Col+1,
316   changeContenu(Conf1,blanc1,Ligm,Col,Conf1a),
317   changeContenu(Conf1a,blanc2,Ligm,Colp,Conf1b),
318   changeContenu(Conf1b,vide,Lig,Col,Conf1c),
319   changeContenu(Conf1c,vide,Lig,Colp,Conf2).
320
321 glissementVOK(bois,Conf1,Conf2):-
322   case(Lig,Col,Conf1,bois),
323   case(Ligm,Col,Conf1,vide),
324   Ligm is Lig-1,
325   changeContenu(Conf1,bois,Ligm,Col,Conf1a),
326   changeContenu(Conf1a,vide,Lig,Col,Conf2).
327
328
329 glissementVOK(marron,Conf1,Conf2):-
330   case(Lig,Col,Conf1,marron),
331   case(Ligm,Col,Conf1,vide),
332   Ligm is Lig-1,
333   changeContenu(Conf1,marron,Ligm,Col,Conf1a),
334   changeContenu(Conf1a,vide,Lig,Col,Conf2).
335
336 /*** fin du copier coller  **/
337
338
339 glissement(Piece,C1,C2):-
340     glissementHOK(Piece,C1,C2).
341 glissement(Piece,C1,C2):-
342     glissementVOK(Piece,C1,C2).
343
344
345
346
347 /* parcours */
348
349 resoud(Conf,[Conf]) :- final(Conf).
350 resoud(Conf,[Conf|Historique]) :-
351     glissement(_,Conf,Confp),
352     resoud(Confp,Historique),
353     not(member(Conf,Historique)).
354
355
356
357 test(Depl):-
358     init(X),
359     resoud(X,Depl).
360
361 /*test(Moves) :-etat_initial(Conf), resoud(Conf,[Conf],Moves).*/