Vous êtes sur la page 1sur 3

% REGLAS

solucion(A) :- sgteLl(e(3,3,0,0),[e(3,3,0,0)],_,[e(3,3,0,0)],_,[],A).

%Siguiente

sgteRe(e(0,0,3,3),V,V,R,R,A,A) :- !.

sgteRe(e(Ma,Ca,Mb,Cb),Lv,V,Lr,R,La,A) :-
accionRe(e(Ma,Ca,Mb,Cb),e(Mas,Cas,Mbs,Cbs),Acc),

not(pertenece(e(Mas,Cas,Mbs,Cbs),Lr)),

not(malo(e(Mas,Cas,Mbs,Cbs))),

sgteLl(e(Mas,Cas,Mbs,Cbs),Lv,V,[e(Mas,Cas,Mbs,Cbs)|Lr],R,[Acc|La],A).

sgteLl(e(Ma,Ca,Mb,Cb),Lv,V,Lr,R,La,A) :-
accionLl(e(Ma,Ca,Mb,Cb),e(Mas,Cas,Mbs,Cbs),Acc),

not(pertenece(e(Mas,Cas,Mbs,Cbs),Lv)),

not(malo(e(Mas,Cas,Mbs,Cbs))),

sgteRe(e(Mas,Cas,Mbs,Cbs),[e(Mas,Cas,Mbs,Cbs)|Lv],V,Lr,R,[Acc|La],A).

% HECHOS
malo(e(Ma,Ca,_,_)) :- Ca > Ma, Ma > 0.
malo(e(_,_,Mb,Cb)) :- Cb > Mb, Mb > 0.

%Acciones
% Llevar 2M -> 1
accionLl(e(Ma,Ca,Mb,Cb),e(Mas,Ca,Mbs,Cb),'1') :- Ma >= 2,
Mas is Ma - 2,
Mbs is Mb + 2.
% Llevar 1M -> 2
accionLl(e(Ma,Ca,Mb,Cb),e(Mas,Ca,Mbs,Cb),'2') :- Ma >= 1,
Mas is Ma - 1,
Mbs is Mb + 1.
% Llevar 2C -> 3
accionLl(e(Ma,Ca,Mb,Cb),e(Ma,Cas,Mb,Cbs),'3') :- Ca >= 2,
Cas is Ca - 2,
Cbs is Cb + 2.
% Llevar 1C -> 4
accionLl(e(Ma,Ca,Mb,Cb),e(Ma,Cas,Mb,Cbs),'4') :- Ca >= 1,
Cas is Ca - 1,
Cbs is Cb + 1.
%Llevar 1M 1C -> 5
accionLl(e(Ma,Ca,Mb,Cb),e(Mas,Cas,Mbs,Cbs),'5') :- Ma >= 1,
Ca >= 1,
Cas is Ca - 1,
Cbs is Cb + 1,
Mas is Ma - 1,
Mbs is Mb + 1.
% Regresar 2M -> 6
accionRe(e(Ma,Ca,Mb,Cb),e(Mas,Ca,Mbs,Cb),'6') :- Mb >= 2,
Mbs is Mb - 2,
Mas is Ma + 2.
% Regresar 1M -> 7
accionRe(e(Ma,Ca,Mb,Cb),e(Mas,Ca,Mbs,Cb),'7') :- Mb >= 1,
Mbs is Mb - 1,
Mas is Ma + 1.
% Regresar 2C -> 8
accionRe(e(Ma,Ca,Mb,Cb),e(Ma,Cas,Mb,Cbs),'8') :- Cb >= 2,
Cbs is Cb - 2,
Cas is Ca + 2.
% Regresar 1C -> 9
accionRe(e(Ma,Ca,Mb,Cb),e(Ma,Cas,Mb,Cbs),'9') :- Cb >= 1,
Cbs is Cb - 1,
Cas is Ca + 1.
% Regresar 1M 1C -> 0
accionRe(e(Ma,Ca,Mb,Cb),e(Mas,Cas,Mbs,Cbs),'10') :- Mb >= 1,
Cb >= 1,
Cbs is Cb - 1,
Cas is Ca + 1,
Mbs is Mb - 1,
Mas is Ma + 1.

%Pertenece
pertenece(X,[X|_]) :- !.
pertenece(X,[_|R]) :- pertenece(X,R).

Vous aimerez peut-être aussi