Attachment 'Solitaire-ENCODING.txt'
Download 1 % Solitare
2 %
3 % Martin Brain
4 % mjb@cs.bath.ac.uk
5 % 04/08/06
6 %
7 % Marcello Balduccini
8 % marcello.balduccini@gmail.com
9 % Jan 11, 2011
10 % Modified to comply with the requirements of ASPCOMP2011.
11 %
12
13 % Time steps and starting states are supplied by the instance.
14
15 % 2x2 squares in the corner aren't used
16 range(1).
17 range(X+1) :- range(X), X < 7.
18
19 location(1,X) :- range(X), 3 <= X, X <= 5.
20 location(2,X) :- range(X), 3 <= X, X <= 5.
21 location(Y,X) :- range(Y), 3 <= X, X <= 5, range(X).
22 location(6,X) :- range(X), 3 <= X, X <= 5.
23 location(7,X) :- range(X), 3 <= X, X <= 5.
24
25 % Moves can be made in one of four directions
26 direction(up).
27 direction(down).
28 direction(left).
29 direction(right).
30
31 % Each location is either full or empty
32 status(full).
33 status(empty).
34
35 % Can move a full location over a full location to an empty one.
36 possibleMove(T,up,X,Y) :- state(T,full,X,Y), state(T,full,X,Y-1), state(T,empty,X,Y-2),
37 time(T), location(X,Y), location(X,Y-1), location(X,Y-2).
38
39 possibleMove(T,down,X,Y) :- state(T,full,X,Y), state(T,full,X,Y+1), state(T,empty,X,Y+2),
40 time(T), location(X,Y), location(X,Y+1), location(X,Y+2).
41
42 possibleMove(T,left,X,Y) :- state(T,full,X,Y), state(T,full,X-1,Y), state(T,empty,X-2,Y),
43 time(T), location(X,Y), location(X-1,Y), location(X-2,Y).
44
45 possibleMove(T,right,X,Y) :- state(T,full,X,Y), state(T,full,X+1,Y), state(T,empty,X+2,Y),
46 time(T), location(X,Y), location(X+1,Y), location(X+2,Y).
47
48
49 %% At each time step choose a move
50 1 <= { move(T,D,X,Y) : direction(D) , location(X,Y) } <= 1 :- time(T), not checking_solution.
51
52 %% CHECKER [marcy 011111]
53 %% Exactly one move must be present at each step.
54 %% Only needed if the choice rule is not enabled.
55 :- not 1 <= #count { T,D,X,Y : move(T,D,X,Y) , direction(D) , location(X,Y) } <= 1, time(T), checking_solution.
56
57 % A move must be possible
58 :- move(T,D,X,Y), not possibleMove(T,D,X,Y), time(T), direction(D), location(X,Y).
59
60 % Now need to look at the effect of moves
61 % (section location parameter to cut grounding size)
62 state(T+1,empty,X,Y) :- move(T,up,X,Y), location(X,Y), time(T).
63 state(T+1,empty,X,Y-1) :- move(T,up,X,Y), location(X,Y), location(X,Y-1), time(T).
64 state(T+1,full,X,Y-2) :- move(T,up,X,Y), location(X,Y), location(X,Y-2), time(T).
65
66 state(T+1,empty,X,Y) :- move(T,down,X,Y), location(X,Y), time(T).
67 state(T+1,empty,X,Y+1) :- move(T,down,X,Y), location(X,Y), location(X,Y+1), time(T).
68 state(T+1,full,X,Y+2) :- move(T,down,X,Y), location(X,Y), location(X,Y+2), time(T).
69
70 state(T+1,empty,X,Y) :- move(T,left,X,Y), location(X,Y), time(T).
71 state(T+1,empty,X-1,Y) :- move(T,left,X,Y), location(X,Y), location(X-1,Y), time(T).
72 state(T+1,full,X-2,Y) :- move(T,left,X,Y), location(X,Y), location(X-2,Y), time(T).
73
74 state(T+1,empty,X,Y) :- move(T,right,X,Y), location(X,Y), time(T).
75 state(T+1,empty,X+1,Y) :- move(T,right,X,Y), location(X,Y), location(X+1,Y), time(T).
76 state(T+1,full,X+2,Y) :- move(T,right,X,Y), location(X,Y), location(X+2,Y), time(T).
77
78
79 changed(T+1,X,Y) :- move(T,up,X,Y), location(X,Y), time(T).
80 changed(T+1,X,Y-1) :- move(T,up,X,Y), location(X,Y), location(X,Y-1), time(T).
81 changed(T+1,X,Y-2) :- move(T,up,X,Y), location(X,Y), location(X,Y-2), time(T).
82
83 changed(T+1,X,Y) :- move(T,down,X,Y), location(X,Y), time(T).
84 changed(T+1,X,Y+1) :- move(T,down,X,Y), location(X,Y), location(X,Y+1), time(T).
85 changed(T+1,X,Y+2) :- move(T,down,X,Y), location(X,Y), location(X,Y+2), time(T).
86
87 changed(T+1,X,Y) :- move(T,left,X,Y), location(X,Y), time(T).
88 changed(T+1,X-1,Y) :- move(T,left,X,Y), location(X,Y), location(X-1,Y), time(T).
89 changed(T+1,X-2,Y) :- move(T,left,X,Y), location(X,Y), location(X-2,Y), time(T).
90
91 changed(T+1,X,Y) :- move(T,right,X,Y), location(X,Y), time(T).
92 changed(T+1,X+1,Y) :- move(T,right,X,Y), location(X,Y), location(X+1,Y), time(T).
93 changed(T+1,X+2,Y) :- move(T,right,X,Y), location(X,Y), location(X+2,Y), time(T).
94
95 state(T+1,S,X,Y) :- not changed(T+1,X,Y), state(T,S,X,Y), status(S), location(X,Y), time(T).
96
97 state(1,full,X,Y) :- full(X,Y).
98 state(1,empty,X,Y) :- empty(X,Y).
Attached Files
You are not allowed to attach a file to this page.