welcome: please sign in
location: attachment:MazeGeneration.core.asp.txt of EncodingsExamples

Attachment 'MazeGeneration.core.asp.txt'

Download

   1 %%%%%% Startup
   2 %
   3 grid(X,Y) :- col(X), row(Y).
   4 
   5 adjacent(X,Y,X,Y1) :- grid(X,Y), Y1 = Y + 1, row(Y1).
   6 adjacent(X,Y,X,Y1) :- grid(X,Y), Y1 = Y - 1, row(Y1).
   7 adjacent(X,Y,X1,Y) :- grid(X,Y), X1 = X + 1, col(X1).
   8 adjacent(X,Y,X1,Y) :- grid(X,Y), X1 = X - 1, col(X1).
   9 
  10 maxRow(MR) :- row(MR), not existRowGreaterThan(MR).
  11 existRowGreaterThan(R) :- row(R), row(RR), RR > R.
  12 maxCol(MC) :- col(MC), not existColGreaterThan(MC).
  13 existColGreaterThan(C) :- col(C), col(CC), CC > C.
  14 
  15 border(1,Y) :- row(Y).
  16 border(X,1) :- col(X).
  17 border(X,Y) :- row(Y), maxCol(X).
  18 border(X,Y) :- col(X), maxRow(Y).
  19 
  20 %%%%%% GUESS
  21 %
  22 wall(X,Y) v empty(X,Y) :- grid(X,Y), not border(X,Y), not entrance(X,Y), not exit(X,Y).
  23 
  24 empty(X,Y) :- entrance(X,Y).
  25 empty(X,Y) :- exit(X,Y).
  26 
  27 %%%%%Constraint 1 (always a path between the entrance and any empty cell
  28 %
  29 reach(X,Y) :- entrance(X,Y).
  30 reach(XX,YY) :- adjacent(X,Y,XX,YY), reach(X,Y), empty(XX,YY).
  31 :- empty(X,Y), not reach(X,Y).
  32 
  33 %%%%% Constraint 2 (wall on any border cell, apart from entrance and exit)
  34 %
  35 wall(X,Y) :- border(X,Y), not entrance(X,Y), not exit(X,Y).
  36 
  37 %%%%%Constraint 3 (no 4-blocks of walls or empty cells)
  38 %
  39 :- wall(X,Y), wall(X1,Y), wall(X,Y1), wall(X1,Y1), X1 = X + 1, Y1 = Y + 1.
  40 :- empty(X,Y), empty(X1,Y), empty(X,Y1), empty(X1,Y1), X1 = X + 1, Y1 = Y + 1.
  41 
  42 %%%%%Constraint 4 (no wall without adjacent walls)
  43 %
  44 :- wall(X,Y), not border(X,Y), not wallWithAdjacentWall(X,Y).
  45 wallWithAdjacentWall(X,Y) :- wall(X,Y), adjacent(X,Y,W,Z), wall(W,Z).
  46 
  47 %%%%%Constraint 5 (no diagonally adjacent walls with no common adjacent walls)
  48 %
  49 :- wall(X,Y), wall(Xp1,Yp1), empty(Xp1,Y), empty(X,Yp1), Xp1 = X + 1, Yp1 = Y + 1.
  50 :- wall(Xp1,Y), wall(X,Yp1), empty(X,Y), empty(Xp1,Yp1), Xp1 = X + 1, Yp1 = Y + 1.

Attached Files

You are not allowed to attach a file to this page.