Guest User

Untitled

a guest
Oct 31st, 2022
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.82 KB | None | 0 0
  1. p(450). p(525). p(600).
  2. p(675). p(750). p(825). p(900).
  3. d(belhino). d(eldang). d(mechania).
  4. d(motomiya). d(suzutake). d(werril). d(zarobit).
  5. r(100). r(150). r(250).
  6. r(350). r(475). r(650). r(1000).
  7. f(10). f(15). f(20).
  8. f(25). f(30). f(40). f(60).
  9.  
  10. myselect([], _).
  11. myselect([A|B],C) :- myselect(A,C,D), myselect(B,D).
  12.  
  13. unique([]).
  14. unique([X|Xs]) :- \+ memberchk(X, Xs), unique(Xs).
  15.  
  16. clue1(Sol) :-
  17. freeze(Sol,(
  18. member([825,_,R1,F1],Sol),
  19. member([P2,_,250,F2],Sol),
  20. member([P3,_,R3,20],Sol),
  21. member([P4,_,475,F4],Sol),
  22. member([P5,_,150,F5],Sol),
  23. member([P6,_,350,F6],Sol),
  24. member([P7,_,R7,40],Sol),
  25. unique([P2,P3,P4,P5,P6,P7,825]),
  26. unique([R1,R3,R7,250,475,150,350]),
  27. unique([F1,F2,F4,F5,F6,20,40]))).
  28.  
  29. clue2(Sol) :-
  30. freeze(Sol,(
  31. member([P1,_,650,_],Sol),
  32. member([P2,mechania,_,_],Sol),
  33. P1 > P2)).
  34.  
  35. clue3(Sol) :-
  36. freeze(Sol,(
  37. member([P,D,_,60],Sol),
  38. (P == 750 ; D == eldang))).
  39.  
  40. clue4(Sol) :-
  41. freeze(Sol,(
  42. (member([900,_,350,_],Sol),
  43. member([_,belhino,_,25],Sol))
  44. ;
  45. (member([900,belhino,_,_],Sol),
  46. member([_,_,350,25],Sol)))).
  47.  
  48. clue5(Sol) :-
  49. freeze(Sol,(
  50. (member([900,_,_,20],Sol),
  51. member([_,zarobit,150,_],Sol))
  52. ;
  53. (member([900,_,150,_],Sol),
  54. member([_,zarobit,_,20],Sol)))).
  55.  
  56. clue6(Sol) :-
  57. freeze(Sol,(
  58. (member([_,_,100,40],Sol),
  59. member([825,_,_,15],Sol))
  60. ;
  61. (member([825,_,_,40],Sol),
  62. member([_,_,100,15],Sol)))).
  63.  
  64. clue7(Sol) :-
  65. freeze(Sol,(
  66. member([_,_,R,10],Sol),
  67. R \== 475)).
  68.  
  69. clue8(Sol) :-
  70. freeze(Sol,(
  71. member([P1,mechania,_,_],Sol),
  72. member([P2,eldang,_,_],Sol),
  73. P1 =:= P2 + 225)).
  74.  
  75. clue9(Sol) :-
  76. freeze(Sol,(
  77. member([P,werril,_,_],Sol),
  78. (P == 450 ; P == 750))).
  79.  
  80. clue10(Sol) :-
  81. freeze(Sol,(
  82. member([P1,_,350,_],Sol),
  83. member([P2,werril,_,_],Sol),
  84. P1 < P2)).
  85.  
  86. clue11(Sol) :-
  87. freeze(Sol,(
  88. member([_,suzutake,R,_],Sol),
  89. R \== 350)).
  90.  
  91. clue12(Sol) :-
  92. freeze(Sol,(
  93. member([P1,motomiya,_,F1],Sol),
  94. member([P2,D2,_,20],Sol),
  95. member([525,D3,_,F3],Sol),
  96. unique([P1,P2,525]),
  97. unique([D2,D3,motomiya]),
  98. unique([F1,F3,20]))).
  99.  
  100. clue13(Sol) :-
  101. freeze(Sol,(
  102. member([P1,zorobit,_,_],Sol),
  103. member([P2,_,_,10],Sol),
  104. P1 =:= P2 + 225)).
  105.  
  106. select4([],[],[],[],[]).
  107. select4(Ps,Ds,Rs,Fs,[[P,D,R,F]|Sol0]) :-
  108. select(P,Ps,Ps0),
  109. select(D,Ds,Ds0),
  110. select(R,Rs,Rs0),
  111. select(F,Fs,Fs0),
  112. select4(Ps0,Ds0,Rs0,Fs0,Sol0).
  113.  
  114. solve(Sol) :-
  115. findall(P,p(P),Ps),
  116. findall(D,d(D),Ds),
  117. findall(R,r(R),Rs),
  118. findall(F,f(F),Fs),
  119. clue1(Sol),
  120. clue2(Sol),
  121. clue3(Sol),
  122. clue4(Sol),
  123. clue5(Sol),
  124. clue6(Sol),
  125. clue7(Sol),
  126. clue8(Sol),
  127. clue9(Sol),
  128. clue10(Sol),
  129. clue11(Sol),
  130. clue12(Sol),
  131. clue13(Sol),
  132. select4(Ps,Ds,Rs,Fs,Sol).
Advertisement
Add Comment
Please, Sign In to add comment