Guest User

Untitled

a guest
Nov 12th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1. % Denver Jayroe (daj0114)
  2. % CSCE 4430 Programming Assignment 6 - Peg Puzzle
  3. % must install Lambda module: ?-pack_install(lambda).
  4.  
  5. :-use_module(library(lambda)).
  6.  
  7. solve:-
  8. solve(Moves),
  9. display(Moves).
  10.  
  11. % Find solution
  12. solve(Moves):-
  13. jump([1], [2,3,4,5,6,7,8,9,10,11,12,13,14,15], [], Moves).
  14.  
  15. solve(Moves1):-
  16. jump([2], [1,3,4,5,6,7,8,9,10,11,12,13,14,15], [], Moves1).
  17.  
  18. solve(Moves2):-
  19. jump([3], [1,2,4,5,6,7,8,9,10,11,12,13,14,15], [], Moves2).
  20.  
  21. solve(Moves3):-
  22. jump([4], [1,2,3,5,6,7,8,9,10,11,12,13,14,15], [], Moves3).
  23.  
  24. solve(Moves4):-
  25. jump([5], [1,2,3,4,6,7,8,9,10,11,12,13,14,15], [], Moves4).
  26.  
  27. jump(_, [_], Lst, Moves):-
  28. reverse(Lst, Moves).
  29.  
  30. % Free = empty space
  31. % Occupied = filled space
  32. jump(Free, Occupied, Lst, Moves):-
  33. select(S, Occupied, Oc1),
  34. select(O, Oc1, Oc2),
  35. select(E, Free, F1),
  36. move(S, O, E),
  37. jump([S, O | F1], [E | Oc2], [move(S,O,E) | Lst], Moves).
  38.  
  39. % legal moves
  40. move(S,2,E):-
  41. member([S,E], [[1,4], [4,1]]).
  42. move(S,3,E):-
  43. member([S,E], [[1,6], [6,1]]).
  44. move(S,4,E):-
  45. member([S,E], [[2,7], [7,2]]).
  46. move(S,5,E):-
  47. member([S,E], [[2,9], [9,2]]).
  48. move(S,5,E):-
  49. member([S,E], [[3,8], [8,3]]).
  50. move(S,6,E):-
  51. member([S,E], [[3,10], [10,3]]).
  52. move(S,5,E):-
  53. member([S,E], [[4,6], [6,4]]).
  54. move(S,7,E):-
  55. member([S,E], [[4,11], [11,4]]).
  56. move(S,8,E):-
  57. member([S,E], [[4,13], [13,4]]).
  58. move(S,8,E):-
  59. member([S,E], [[5,12], [12,5]]).
  60. move(S,9,E):-
  61. member([S,E], [[5,14], [14,5]]).
  62. move(S,9,E):-
  63. member([S,E], [[6,13], [13,6]]).
  64. move(S,10,E):-
  65. member([S,E], [[6,15], [15,6]]).
  66. move(S,8,E):-
  67. member([S,E], [[9,7], [7,9]]).
  68. move(S,9,E):-
  69. member([S,E], [[10,8], [8,10]]).
  70. move(S,12,E):-
  71. member([S,E], [[11,13], [13,11]]).
  72. move(S,13,E):-
  73. member([S,E], [[12,14], [14,12]]).
  74. move(S,14,E):-
  75. member([S,E], [[15,13], [13,15]]).
  76.  
  77. % Display Solution 1
  78. display(Sol):-
  79. display(Sol, [1]).
  80.  
  81. % Display solution by level
  82. % Xs and Os
  83. display([], Free):-
  84. numlist(1,15, Lst),
  85. maplist(\X^I^(member(X, Free) -> I = 'O'; I = 'X'), Lst, [I1,I2,I3,I4,I5,I6,I7,I8,I9,I10,I11,I12,I13,I14,I15]),
  86. format(' ~w ~n', [I1]),
  87. format(' ~w ~w ~n', [I2,I3]),
  88. format(' ~w ~w ~w ~n', [I4,I5,I6]),
  89. format(' ~w ~w ~w ~w ~n', [I7,I8,I9,I10]),
  90. format('~w ~w ~w ~w ~w ~n~n', [I11,I12,I13,I14,I15]),
  91. writeln(complete).
  92.  
  93. display([move(Start, Middle, End) | Tail], Free):-
  94. numlist(1,15, Lst),
  95. maplist(\X^I^(member(X, Free) -> I = 'O'; I = 'X'), Lst, [I1,I2,I3,I4,I5,I6,I7,I8,I9,I10,I11,I12,I13,I14,I15]),
  96. format(' ~w ~n', [I1]),
  97. format(' ~w ~w ~n', [I2,I3]),
  98. format(' ~w ~w ~w ~n', [I4,I5,I6]),
  99. format(' ~w ~w ~w ~w ~n', [I7,I8,I9,I10]),
  100. format('~w ~w ~w ~w ~w ~n~n', [I11,I12,I13,I14,I15]),
  101. select(End, Free, F1),
  102. display(Tail, [Start, Middle | F1]).
Add Comment
Please, Sign In to add comment