welcome: please sign in
location: attachment:Solitaire-ENCODING.txt of OfficialProblemSuite

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.