Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % This buffer is for notes you don't want to save.
- % If you want to create a file, visit that file with C-x C-f,
- % then enter the text in that file's own buffer.
- solve(S) :- S = [_,_,_,_,_],
- nationality(O1,englishman),color(O1,red),member(O1,S),
- color(O2,green),drink(O2,coffee),member(O2,S),
- nationality(O3,italian),drink(O3,tea),member(O3,S),
- color(O4,yellow),cigarette(O4,kent),member(O4,S),
- drink(O5,milk),middle(O5,S),
- nationality(O6,russian),leftmost(O6,S),
- cigarette(OA7,marlboro),pet(OB7,fox),near(OA7,OB7,S),
- cigarette(OA8,kent),pet(OB8,horse),near(OA8,OB8,S),
- drink(O9,juice),cigarette(O9,pall_mall),member(O9,S),
- nationality(O10,japanese),cigarette(O10,assos),member(O10,S),
- nationality(OA11,russian),color(OB11,blue),near(OA11,OB11,S),
- nationality(O12,spanish),pet(O12,dog),member(O12,S),
- pet(O13,snake),cigarette(O13,camel),member(O13,S),
- color(OA14,gray),color(OB14,green),near(OA14,OB14,S),
- pet(OA15,cat),drink(OB15,vodka),lateral(OA15,S),lateral(OB15,S).
- color([Color,_,_,_,_],Color).
- nationality([_,Nationality,_,_,_],Nationality).
- drink([_,_,Drink,_,_],Drink).
- cigarette([_,_,_,Cigarette,_],Cigarette).
- pet([_,_,_,_,Pet],Pet).
- leftmost(X,[X,_,_,_,_]).
- middle(X,[_,_,X,_,_]).
- lateral(X,[X,_,_,_,_]).
- lateral(X,[_,_,_,_,X]).
- left(A,B,S) :-
- append(_,[A,B|_],S).
- near(A,B,S) :-
- left(A,B,S).
- near(A,B,S) :-
- left(B,A,S).
- solve_cities(S) :- S = [_, _, _, _], member(a, S), member(b, S), member(c, S), member(d, S), distance(a, c, S, DAC), distance(c, d, S, DCD), distance(b, c, S, DBC), distance(b, d, S, DBD), DAC > DCD, DBC < DBD.
- distance(A, B, List, D) :- nth0(IndexA, List, A), nth0(IndexB, List, B),
- abs(IndexA - IndexB, D).
- solve_pr(S) :- S = [_, _], l3(S).
- l1(S) :- S = [p, t].
- l2(S) :- S = [p, t]; S = [t, p].
- l3(S) :- l1(S), not(l2(S)).
- l3(S) :- l2(S), not(l1(S)).
- solve9 :-
- StartingState = [1,3,3,0,0],
- depth_first_search([],StartingState,Solution),
- write(Solution),
- nl.
- depth_first_search(CurrentPath,CurrentState,Solution) :-
- CurrentState=[-1,0,0,3,3],
- Solution=[CurrentState|CurrentPath].
- depth_first_search(CurrentPath,CurrentState,Solution) :-
- successor(CurrentState,NewState),
- not(member(NewState,CurrentPath)),
- depth_first_search([CurrentState|CurrentPath],NewState,Solution).
- %one miss
- successor([Side,LM,LC,RM,RC],[NewSide,NewLM,LC,NewRM,RC]) :-
- NewLM is LM-1*Side,
- NewRM is RM+1*Side,
- NewSide is (-1)*Side,
- test(NewLM,LC,NewRM,RC).
- %two can
- successor([Side,LM,LC,RM,RC],[NewSide,LM,NewLC,RM,NewRC]) :-
- NewLC is LC-2*Side,
- NewRC is RC+2*Side,
- NewSide is (-1)*Side,
- test(LM,NewLC,RM,NewRC).
- %one can
- successor([Side,LM,LC,RM,RC],[NewSide,LM,NewLC,RM,NewRC]) :-
- NewLC is LC-1*Side,
- NewRC is RC+1*Side,
- NewSide is (-1)*Side,
- test(LM,NewLC,RM,NewRC).
- %two miss
- successor([Side,LM,LC,RM,RC],[NewSide,NewLM,LC,NewRM,RC]) :-
- NewLM is LM-2*Side,
- NewRM is RM+2*Side,
- NewSide is (-1)*Side,
- test(NewLM,LC,NewRM,RC).
- %one mis one can
- successor([Side,LM,LC,RM,RC],[NewSide,NewLM,NewLC,NewRM,NewRC]) :-
- NewLC is LC-1*Side,
- NewRC is RC+1*Side,
- NewLM is LM-1*Side,
- NewRM is RM+1*Side,
- NewSide is (-1)*Side,
- test(LM,NewLC,RM,NewRC).
- test(LeftMissionaries,LeftCannibals,RightMissionaries,RightCannibals) :-
- LeftMissionaries>=0,
- LeftCannibals>=0,
- RightMissionaries>=0,
- RightCannibals>=0,
- LeftMissionaries>=LeftCannibals,
- RightMissionaries>=RightCannibals.
- test(LeftMissionaries,LeftCannibals,RightMissionaries,RightCannibals) :-
- LeftMissionaries>=0,
- LeftCannibals>=0,
- RightMissionaries>=0,
- RightCannibals>=0,
- LeftMissionaries>=LeftCannibals,
- RightMissionaries=0.
- test(LeftMissionaries,LeftCannibals,RightMissionaries,RightCannibals) :-
- LeftMissionaries>=0,
- LeftCannibals>=0,
- RightMissionaries>=0,
- RightCannibals>=0,
- LeftMissionaries=0,
- RightMissionaries>=RightCannibals.
- solve_h :- StartingState = [3,0,0], dp_search([], StartingState, Solution), write(Solution), nl.
- dp_search(CurPath, CurState, Solution) :-
- CurState = [0, 0, 3],
- Solution = [CurState|CurPath].
- dp_search(CurrentPath,CurrentState,Solution) :-
- successor_h(CurrentState,NewState),
- not(member(NewState,CurrentPath)),
- dp_search([CurrentState|CurrentPath],NewState,Solution).
- successor_h([Disk1, Disk2, Disk3], [NewDisk1, NewDisk2, Disk3]) :-
- Disk1 > 0,
- NewDisk1 is Disk1-1,
- NewDisk2 is Disk2+1.
- successor_h([Disk1, Disk2, Disk3], [NewDisk1, Disk2, NewDisk3]) :-
- Disk1 > 0,
- NewDisk1 is Disk1-1,
- NewDisk3 is Disk3+1.
- successor_h([Disk1, Disk2, Disk3], [NewDisk1, NewDisk2, Disk3]) :-
- Disk2 > 0,
- NewDisk2 is Disk2-1,
- NewDisk1 is Disk1+1.
- successor_h([Disk1, Disk2, Disk3], [Disk1, NewDisk2, NewDisk3]) :-
- Disk2 > 0,
- NewDisk2 is Disk2-1,
- NewDisk3 is Disk3+1.
- successor_h([Disk1, Disk2, Disk3], [NewDisk1, Disk2, NewDisk3]) :-
- Disk3 > 0,
- NewDisk3 is Disk3-1,
- NewDisk1 is Disk1+1.
- successor_h([Disk1, Disk2, Disk3], [Disk1, NewDisk2, NewDisk3]) :-
- Disk3 > 0,
- NewDisk3 is Disk3-1,
- NewDisk2 is Disk2+1.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement