Advertisement
Tavi33

BIA S11

May 12th, 2017
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.94 KB | None | 0 0
  1. % This buffer is for notes you don't want to save.
  2. % If you want to create a file, visit that file with C-x C-f,
  3. % then enter the text in that file's own buffer.
  4.  
  5. solve(S) :- S = [_,_,_,_,_],
  6. nationality(O1,englishman),color(O1,red),member(O1,S),
  7. color(O2,green),drink(O2,coffee),member(O2,S),
  8. nationality(O3,italian),drink(O3,tea),member(O3,S),
  9. color(O4,yellow),cigarette(O4,kent),member(O4,S),
  10. drink(O5,milk),middle(O5,S),
  11. nationality(O6,russian),leftmost(O6,S),
  12. cigarette(OA7,marlboro),pet(OB7,fox),near(OA7,OB7,S),
  13. cigarette(OA8,kent),pet(OB8,horse),near(OA8,OB8,S),
  14. drink(O9,juice),cigarette(O9,pall_mall),member(O9,S),
  15. nationality(O10,japanese),cigarette(O10,assos),member(O10,S),
  16. nationality(OA11,russian),color(OB11,blue),near(OA11,OB11,S),
  17. nationality(O12,spanish),pet(O12,dog),member(O12,S),
  18. pet(O13,snake),cigarette(O13,camel),member(O13,S),
  19. color(OA14,gray),color(OB14,green),near(OA14,OB14,S),
  20. pet(OA15,cat),drink(OB15,vodka),lateral(OA15,S),lateral(OB15,S).
  21.  
  22. color([Color,_,_,_,_],Color).
  23. nationality([_,Nationality,_,_,_],Nationality).
  24. drink([_,_,Drink,_,_],Drink).
  25. cigarette([_,_,_,Cigarette,_],Cigarette).
  26. pet([_,_,_,_,Pet],Pet).
  27. leftmost(X,[X,_,_,_,_]).
  28. middle(X,[_,_,X,_,_]).
  29. lateral(X,[X,_,_,_,_]).
  30. lateral(X,[_,_,_,_,X]).
  31. left(A,B,S) :-
  32. append(_,[A,B|_],S).
  33. near(A,B,S) :-
  34. left(A,B,S).
  35. near(A,B,S) :-
  36. left(B,A,S).
  37.  
  38. 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.
  39.  
  40. distance(A, B, List, D) :- nth0(IndexA, List, A), nth0(IndexB, List, B),
  41. abs(IndexA - IndexB, D).
  42.  
  43. solve_pr(S) :- S = [_, _], l3(S).
  44.  
  45. l1(S) :- S = [p, t].
  46. l2(S) :- S = [p, t]; S = [t, p].
  47. l3(S) :- l1(S), not(l2(S)).
  48. l3(S) :- l2(S), not(l1(S)).
  49.  
  50. solve9 :-
  51. StartingState = [1,3,3,0,0],
  52. depth_first_search([],StartingState,Solution),
  53. write(Solution),
  54. nl.
  55.  
  56. depth_first_search(CurrentPath,CurrentState,Solution) :-
  57. CurrentState=[-1,0,0,3,3],
  58. Solution=[CurrentState|CurrentPath].
  59.  
  60. depth_first_search(CurrentPath,CurrentState,Solution) :-
  61. successor(CurrentState,NewState),
  62. not(member(NewState,CurrentPath)),
  63. depth_first_search([CurrentState|CurrentPath],NewState,Solution).
  64.  
  65. %one miss
  66. successor([Side,LM,LC,RM,RC],[NewSide,NewLM,LC,NewRM,RC]) :-
  67. NewLM is LM-1*Side,
  68. NewRM is RM+1*Side,
  69. NewSide is (-1)*Side,
  70. test(NewLM,LC,NewRM,RC).
  71.  
  72. %two can
  73. successor([Side,LM,LC,RM,RC],[NewSide,LM,NewLC,RM,NewRC]) :-
  74. NewLC is LC-2*Side,
  75. NewRC is RC+2*Side,
  76. NewSide is (-1)*Side,
  77. test(LM,NewLC,RM,NewRC).
  78.  
  79. %one can
  80. successor([Side,LM,LC,RM,RC],[NewSide,LM,NewLC,RM,NewRC]) :-
  81. NewLC is LC-1*Side,
  82. NewRC is RC+1*Side,
  83. NewSide is (-1)*Side,
  84. test(LM,NewLC,RM,NewRC).
  85.  
  86. %two miss
  87. successor([Side,LM,LC,RM,RC],[NewSide,NewLM,LC,NewRM,RC]) :-
  88. NewLM is LM-2*Side,
  89. NewRM is RM+2*Side,
  90. NewSide is (-1)*Side,
  91. test(NewLM,LC,NewRM,RC).
  92.  
  93. %one mis one can
  94. successor([Side,LM,LC,RM,RC],[NewSide,NewLM,NewLC,NewRM,NewRC]) :-
  95. NewLC is LC-1*Side,
  96. NewRC is RC+1*Side,
  97. NewLM is LM-1*Side,
  98. NewRM is RM+1*Side,
  99. NewSide is (-1)*Side,
  100. test(LM,NewLC,RM,NewRC).
  101.  
  102. test(LeftMissionaries,LeftCannibals,RightMissionaries,RightCannibals) :-
  103. LeftMissionaries>=0,
  104. LeftCannibals>=0,
  105. RightMissionaries>=0,
  106. RightCannibals>=0,
  107. LeftMissionaries>=LeftCannibals,
  108. RightMissionaries>=RightCannibals.
  109.  
  110. test(LeftMissionaries,LeftCannibals,RightMissionaries,RightCannibals) :-
  111. LeftMissionaries>=0,
  112. LeftCannibals>=0,
  113. RightMissionaries>=0,
  114. RightCannibals>=0,
  115. LeftMissionaries>=LeftCannibals,
  116. RightMissionaries=0.
  117.  
  118. test(LeftMissionaries,LeftCannibals,RightMissionaries,RightCannibals) :-
  119. LeftMissionaries>=0,
  120. LeftCannibals>=0,
  121. RightMissionaries>=0,
  122. RightCannibals>=0,
  123. LeftMissionaries=0,
  124. RightMissionaries>=RightCannibals.
  125.  
  126. solve_h :- StartingState = [3,0,0], dp_search([], StartingState, Solution), write(Solution), nl.
  127.  
  128. dp_search(CurPath, CurState, Solution) :-
  129. CurState = [0, 0, 3],
  130. Solution = [CurState|CurPath].
  131.  
  132. dp_search(CurrentPath,CurrentState,Solution) :-
  133. successor_h(CurrentState,NewState),
  134. not(member(NewState,CurrentPath)),
  135. dp_search([CurrentState|CurrentPath],NewState,Solution).
  136.  
  137. successor_h([Disk1, Disk2, Disk3], [NewDisk1, NewDisk2, Disk3]) :-
  138. Disk1 > 0,
  139. NewDisk1 is Disk1-1,
  140. NewDisk2 is Disk2+1.
  141.  
  142. successor_h([Disk1, Disk2, Disk3], [NewDisk1, Disk2, NewDisk3]) :-
  143. Disk1 > 0,
  144. NewDisk1 is Disk1-1,
  145. NewDisk3 is Disk3+1.
  146.  
  147. successor_h([Disk1, Disk2, Disk3], [NewDisk1, NewDisk2, Disk3]) :-
  148. Disk2 > 0,
  149. NewDisk2 is Disk2-1,
  150. NewDisk1 is Disk1+1.
  151.  
  152. successor_h([Disk1, Disk2, Disk3], [Disk1, NewDisk2, NewDisk3]) :-
  153. Disk2 > 0,
  154. NewDisk2 is Disk2-1,
  155. NewDisk3 is Disk3+1.
  156.  
  157. successor_h([Disk1, Disk2, Disk3], [NewDisk1, Disk2, NewDisk3]) :-
  158. Disk3 > 0,
  159. NewDisk3 is Disk3-1,
  160. NewDisk1 is Disk1+1.
  161.  
  162. successor_h([Disk1, Disk2, Disk3], [Disk1, NewDisk2, NewDisk3]) :-
  163. Disk3 > 0,
  164. NewDisk3 is Disk3-1,
  165. NewDisk2 is Disk2+1.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement