<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">/* accesseurs sur ligne et colonne*/

colonne(1,[A,_,_,_],A).
colonne(2,[_,A,_,_],A).
colonne(3,[_,_,A,_],A).
colonne(4,[_,_,_,A],A).

ligne(1,[A,_,_,_,_],A).
ligne(2,[_,A,_,_,_],A).
ligne(3,[_,_,A,_,_],A).
ligne(4,[_,_,_,A,_],A).
ligne(5,[_,_,_,_,A],A).





/* retourne le contenu "Contenu_case" de la case  
situÃ© Ã&nbsp; la colonne "Col" et la ligne "Lig" du jeux en cours
"Contenu_jeu" */
 
case(Lig,Col,Conf,Contenu) :- 
    ligne(Lig,Conf,Ligne),
    colonne(Col,Ligne,Contenu).


changeContenuColonne(1,X,[_,B,C,D],[X,B,C,D]).
changeContenuColonne(2,X,[A,_,C,D],[A,X,C,D]).
changeContenuColonne(3,X,[A,B,_,D],[A,B,X,D]).
changeContenuColonne(4,X,[A,B,C,_],[A,B,C,X]).


changeContenuLigne(1,X,[_,B,C,D,E],[X,B,C,D,E]).
changeContenuLigne(2,X,[A,_,C,D,E],[A,X,C,D,E]).
changeContenuLigne(3,X,[A,B,_,D,E],[A,B,X,D,E]).
changeContenuLigne(4,X,[A,B,C,_,E],[A,B,C,X,E]).
changeContenuLigne(5,X,[A,B,C,D,_],[A,B,C,D,X]).



changeContenu(Conf1,Piece,Y,X,Conf2):-
    ligne(Y,Conf1,Ligne),
    changeContenuColonne(X,Piece,Ligne,Lignep),
    changeContenuLigne(Y,Lignep,Conf1,Conf2).



init([
    [jaunea1,rouge1,rouge2,jauneb1],
    [jaunea2,rouge3,rouge4,jauneb2],
    [noira1,blanc1,blanc2,noirb1],
    [noira2,bois1,bois2,noirb2],
    [marron1,vide1,vide1,marron2]]).
    


/*
final([
    [jaune1,rouge1,rouge2,jaune1],
    [jaune2,rouge3,rouge4,jaune2],
    [noir1,blanc1,blanc2,noir1],
    [noir2,bois,vide,noir2],
    [marron,vide,bois,marron]]).

    
final([
    [_,_,_,_],
    [_,_,_,_],
    [_,_,_,_],
    [_,rouge1,rouge2,_],
    [_,rouge3,rouge4,_]]).

*/


final([
    [jaune1,rouge1,rouge2,jaune1],
    [jaune2,rouge3,rouge4,jaune2],
    [_,_,_,_],
    [_,noir1,noir1,_],
    [_,noir2,noir2,_]]).




/* deplacement horizontal  */
glissementHOK(rouge1,Conf1,Conf2):-
  case(Lig,Col,Conf1,rouge1),
  case(Lig,Colpp,Conf1,vide),
  case(Ligp,Colpp,Conf1,vide),
  Ligp is Lig+1,
  Colp is Col+1,
  Colpp is Col+2,
  changeContenu(Conf1,rouge1,Lig,Colp,Conf1a),
  changeContenu(Conf1a,rouge2,Lig,Colpp,Conf1b),
  changeContenu(Conf1b,vide,Lig,Col,Conf1c),
  changeContenu(Conf1c,rouge3,Ligp,Colp,Conf1d),
  changeContenu(Conf1d,rouge4,Ligp,Colpp,Conf1e),
  changeContenu(Conf1e,vide,Ligp,Col,Conf2).

glissementHOK(noir1,Conf1,Conf2):-
  case(Lig,Col,Conf1,noir1),
  case(Lig,Colp,Conf1,vide),
  case(Ligp,Colp,Conf1,vide),
  Ligp is Lig+1,
  Colp is Col+1,
  changeContenu(Conf1,noir1,Lig,Colp,Conf1a),
  changeContenu(Conf1a,noir2,Ligp,Colp,Conf1b),
  changeContenu(Conf1b,vide,Lig,Col,Conf1c),
  changeContenu(Conf1c,vide,Ligp,Col,Conf2).


glissementHOK(jaune1,Conf1,Conf2):-
  case(Lig,Col,Conf1,jaune1),
  case(Lig,Colp,Conf1,vide),
  case(Ligp,Colp,Conf1,vide),
  Ligp is Lig+1,
  Colp is Col+1,
  changeContenu(Conf1,jaune1,Lig,Colp,Conf1a),
  changeContenu(Conf1a,jaune2,Ligp,Colp,Conf1b),
  changeContenu(Conf1b,vide,Lig,Col,Conf1c),
  changeContenu(Conf1c,vide,Ligp,Col,Conf2).

glissementHOK(blanc1,Conf1,Conf2):-
  case(Lig,Col,Conf1,blanc1),
  case(Lig,Colpp,Conf1,vide),
  Colpp is Col+2,
  Colp is Col+1,
  changeContenu(Conf1,blanc1,Lig,Colp,Conf1a),
  changeContenu(Conf1a,blanc2,Lig,Colpp,Conf1b),
  changeContenu(Conf1b,vide,Lig,Col,Conf2).

glissementHOK(bois,Conf1,Conf2):-
  case(Lig,Col,Conf1,bois),
  case(Lig,Colp,Conf1,vide),
  Colp is Col+1,
  changeContenu(Conf1,bois,Lig,Colp,Conf1a),
  changeContenu(Conf1a,vide,Lig,Col,Conf2).

glissementHOK(marron,Conf1,Conf2):-
  case(Lig,Col,Conf1,marron),
  case(Lig,Colp,Conf1,vide),
  Colp is Col+1,
  changeContenu(Conf1,marron,Lig,Colp,Conf1a),
  changeContenu(Conf1a,vide,Lig,Col,Conf2).

/***** Copier-coller   a simplifier ***/

glissementHOK(rouge1,Conf1,Conf2):-
  case(Lig,Col,Conf1,rouge1),
  case(Lig,Colm,Conf1,vide),
  case(Ligp,Colm,Conf1,vide),
  Ligp is Lig+1,
  Colm is Col-1,
  Colp is Col+1,
  changeContenu(Conf1,rouge1,Lig,Colm,Conf1a),
  changeContenu(Conf1a,rouge2,Lig,Col,Conf1b),
  changeContenu(Conf1b,vide,Lig,Colp,Conf1c),
  changeContenu(Conf1c,rouge3,Ligp,Colm,Conf1d),
  changeContenu(Conf1d,rouge4,Ligp,Col,Conf1e),
  changeContenu(Conf1e,vide,Ligp,Colp,Conf2).


glissementHOK(noir1,Conf1,Conf2):-
  case(Lig,Col,Conf1,noir1),
  case(Lig,Colp,Conf1,vide),
  case(Ligp,Colp,Conf1,vide),
  Ligp is Lig+1,
  Colp is Col-1,
  changeContenu(Conf1,noir1,Lig,Colp,Conf1a),
  changeContenu(Conf1a,noir2,Ligp,Colp,Conf1b),
  changeContenu(Conf1b,vide,Lig,Col,Conf1c),
  changeContenu(Conf1c,vide,Ligp,Col,Conf2).


glissementHOK(jaune1,Conf1,Conf2):-
  case(Lig,Col,Conf1,jaune1),
  case(Lig,Colp,Conf1,vide),
  case(Ligp,Colp,Conf1,vide),
  Ligp is Lig+1,
  Colp is Col-1,
  changeContenu(Conf1,jaune1,Lig,Colp,Conf1a),
  changeContenu(Conf1a,jaune2,Ligp,Colp,Conf1b),
  changeContenu(Conf1b,vide,Lig,Col,Conf1c),
  changeContenu(Conf1c,vide,Ligp,Col,Conf2).


glissementHOK(blanc1,Conf1,Conf2):-
  case(Lig,Col,Conf1,blanc1),
  case(Lig,Colm,Conf1,vide),
  Colp is Col+1,
  Colm is Col-1,
  changeContenu(Conf1,blanc1,Lig,Colm,Conf1a),
  changeContenu(Conf1a,blanc2,Lig,Col,Conf1b),
  changeContenu(Conf1b,vide,Lig,Colp,Conf2).

glissementHOK(bois,Conf1,Conf2):-
  case(Lig,Col,Conf1,bois),
  case(Lig,Colm,Conf1,vide),
  Colm is Col-1,
  changeContenu(Conf1,bois,Lig,Colm,Conf1a),
  changeContenu(Conf1a,vide,Lig,Col,Conf2).

glissementHOK(marron,Conf1,Conf2):-
  case(Lig,Col,Conf1,marron),
  case(Lig,Colm,Conf1,vide),
  Colm is Col-1,
  changeContenu(Conf1,marron,Lig,Colm,Conf1a),
  changeContenu(Conf1a,vide,Lig,Col,Conf2).


/** fin du copier-coller **/



/** dÃ©placement vertical **/
 
glissementVOK(rouge1,Conf1,Conf2):-
  case(Lig,Col,Conf1,rouge1),
  case(Ligpp,Col,Conf1,vide),
  case(Ligpp,Colp,Conf1,vide),
  Ligp is Lig+1,
  Ligpp is Lig+2,
  Colp is Col+1,
  changeContenu(Conf1,rouge1,Ligp,Col,Conf1a),
  changeContenu(Conf1a,rouge2,Ligp,Colp,Conf1b),
  changeContenu(Conf1b,vide,Lig,Col,Conf1c),
  changeContenu(Conf1c,rouge3,Ligpp,Col,Conf1d),
  changeContenu(Conf1d,rouge4,Ligpp,Colp,Conf1e),
  changeContenu(Conf1e,vide,Lig,Colp,Conf2).

glissementVOK(noir1,Conf1,Conf2):-
  case(Lig,Col,Conf1,noir1),
  case(Ligpp,Col,Conf1,vide),
  Ligp is Lig+1,
  Ligpp is Lig+2,
  changeContenu(Conf1,noir1,Ligp,Col,Conf1a),
  changeContenu(Conf1a,noir2,Ligpp,Col,Conf1b),
  changeContenu(Conf1b,vide,Lig,Col,Conf2).

glissementVOK(jaune1,Conf1,Conf2):-
  case(Lig,Col,Conf1,jaune1),
  case(Ligpp,Col,Conf1,vide),
  Ligp is Lig+1,
  Ligpp is Lig+2,
  changeContenu(Conf1,jaune1,Ligp,Col,Conf1a),
  changeContenu(Conf1a,jaune2,Ligpp,Col,Conf1b),
  changeContenu(Conf1b,vide,Lig,Col,Conf2).

glissementVOK(blanc1,Conf1,Conf2):-
  case(Lig,Col,Conf1,blanc1),
  case(Ligp,Col,Conf1,vide),
  case(Ligp,Colp,Conf1,vide),
  Ligp is Lig+1,
  Colp is Col+1,
  changeContenu(Conf1,blanc1,Ligp,Col,Conf1a),
  changeContenu(Conf1a,blanc2,Ligp,Colp,Conf1b),
  changeContenu(Conf1b,vide,Lig,Col,Conf1c),
  changeContenu(Conf1c,vide,Lig,Colp,Conf2).

glissementVOK(bois,Conf1,Conf2):-
  case(Lig,Col,Conf1,bois),
  case(Ligp,Col,Conf1,vide),
  Ligp is Lig+1,
  changeContenu(Conf1,bois,Ligp,Col,Conf1a),
  changeContenu(Conf1a,vide,Lig,Col,Conf2).


glissementVOK(marron,Conf1,Conf2):-
  case(Lig,Col,Conf1,marron),
  case(Ligp,Col,Conf1,vide),
  Ligp is Lig+1,
  changeContenu(Conf1,marron,Ligp,Col,Conf1a),
  changeContenu(Conf1a,vide,Lig,Col,Conf2).

/***** copier coller de deplacement vertical   **/
 
glissementVOK(rouge1,Conf1,Conf2):-
  case(Lig,Col,Conf1,rouge1),
  case(Ligm,Col,Conf1,vide),
  case(Ligm,Colp,Conf1,vide),
  Ligp is Lig+1,
  Ligm is Lig-1,
  Colp is Col+1,
  changeContenu(Conf1,rouge1,Ligm,Col,Conf1a),
  changeContenu(Conf1a,rouge2,Ligm,Colp,Conf1b),
  changeContenu(Conf1b,vide,Ligp,Col,Conf1c),
  changeContenu(Conf1c,rouge3,Lig,Col,Conf1d),
  changeContenu(Conf1d,rouge4,Lig,Colp,Conf1e),
  changeContenu(Conf1e,vide,Ligp,Colp,Conf2).

glissementVOK(noir1,Conf1,Conf2):-
  case(Lig,Col,Conf1,noir1),
  case(Ligm,Col,Conf1,vide),
  Ligp is Lig+1,
  Ligm is Lig-1,
  changeContenu(Conf1,noir1,Ligm,Col,Conf1a),
  changeContenu(Conf1a,noir2,Lig,Col,Conf1b),
  changeContenu(Conf1b,vide,Ligp,Col,Conf2).

glissementVOK(jaune1,Conf1,Conf2):-
  case(Lig,Col,Conf1,jaune1),
  case(Ligm,Col,Conf1,vide),
  Ligp is Lig+1,
  Ligm is Lig-1,
  changeContenu(Conf1,jaune1,Ligm,Col,Conf1a),
  changeContenu(Conf1a,jaune2,Lig,Col,Conf1b),
  changeContenu(Conf1b,vide,Ligp,Col,Conf2).

glissementVOK(blanc1,Conf1,Conf2):-
  case(Lig,Col,Conf1,blanc1),
  case(Ligm,Col,Conf1,vide),
  case(Ligm,Colp,Conf1,vide),
  Ligm is Lig-1,
  Colp is Col+1,
  changeContenu(Conf1,blanc1,Ligm,Col,Conf1a),
  changeContenu(Conf1a,blanc2,Ligm,Colp,Conf1b),
  changeContenu(Conf1b,vide,Lig,Col,Conf1c),
  changeContenu(Conf1c,vide,Lig,Colp,Conf2).

glissementVOK(bois,Conf1,Conf2):-
  case(Lig,Col,Conf1,bois),
  case(Ligm,Col,Conf1,vide),
  Ligm is Lig-1,
  changeContenu(Conf1,bois,Ligm,Col,Conf1a),
  changeContenu(Conf1a,vide,Lig,Col,Conf2).


glissementVOK(marron,Conf1,Conf2):-
  case(Lig,Col,Conf1,marron),
  case(Ligm,Col,Conf1,vide),
  Ligm is Lig-1,
  changeContenu(Conf1,marron,Ligm,Col,Conf1a),
  changeContenu(Conf1a,vide,Lig,Col,Conf2).

/*** fin du copier coller  **/


glissement(Piece,C1,C2):-
    glissementHOK(Piece,C1,C2).
glissement(Piece,C1,C2):-
    glissementVOK(Piece,C1,C2).




/* parcours */

resoud(Conf,[Conf]) :- final(Conf).
resoud(Conf,[Conf|Historique]) :-
    glissement(_,Conf,Confp),
    resoud(Confp,Historique),
    not(member(Conf,Historique)).



test(Depl):-
    init(X),
    resoud(X,Depl).

/*test(Moves) :-etat_initial(Conf), resoud(Conf,[Conf],Moves).*/
</pre></body></html>