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

Attachment 'sudoku.core.asp.txt'

Download

   1 % Input predicate: square(X,Y,S)
   2 % Input predicate: size(S).
   3 
   4 % Available symbols.
   5 symbol(1).
   6 symbol(X) :- symbol(Y), X = Y + 1, size(S), X<=S.
   7 
   8 % Misuse symbols as dimensions
   9 dimX(X) :- symbol(X).
  10 dimY(Y) :- symbol(Y).
  11 
  12 % Dimensions define fields.
  13 field(X,Y) :- dimX(X), dimY(Y).
  14 
  15 % Single out the busy fields.
  16 occupied(X,Y) :- square(X,Y,_).
  17 
  18 % Guess assignments for the free fields. 
  19 sol9(X,Y,1) v sol9(X,Y,2) v sol9(X,Y,3)
  20  v sol9(X,Y,4) v sol9(X,Y,5) v sol9(X,Y,6)
  21  v sol9(X,Y,7) v sol9(X,Y,8) v sol9(X,Y,9)
  22 :- field(X,Y), not occupied(X,Y), size(9).
  23 
  24 sol25(X,Y,1) v sol25(X,Y,2) v sol25(X,Y,3)
  25  v sol25(X,Y,4) v sol25(X,Y,5) v sol25(X,Y,6)
  26  v sol25(X,Y,7) v sol25(X,Y,8) v sol25(X,Y,9)
  27  v sol25(X,Y,10) v sol25(X,Y,11) v sol25(X,Y,12)
  28  v sol25(X,Y,13) v sol25(X,Y,14) v sol25(X,Y,15)
  29  v sol25(X,Y,16) v sol25(X,Y,17) v sol25(X,Y,18)
  30  v sol25(X,Y,19) v sol25(X,Y,20) v sol25(X,Y,21)
  31  v sol25(X,Y,22) v sol25(X,Y,23) v sol25(X,Y,24) v sol25(X,Y,25)
  32 :- field(X,Y), not occupied(X,Y), size(25).
  33 
  34 sol(X,Y,S) :- sol9(X,Y,S), size(9).
  35 sol(X,Y,S) :- sol25(X,Y,S), size(25).
  36 
  37 % Fix preassignments.
  38 sol(X,Y,S) :- square(X,Y,S).
  39 
  40 % One symbol per column. (Y1 < Y2 stands for Y1 <> Y2, to avoid useless symmetric constraints.)
  41 :- sol(X,Y1,S), sol(X,Y2,S), Y1 < Y2.
  42 % One symbol per row. (X1 < X2 stands for X1 <> X2, to avoid useless symmetric constraints.)
  43 :- sol(X1,Y,S), sol(X2,Y,S), X1 < X2. 
  44 
  45 % One symbol per box. lessThan (used in place of notEqual) avoids symmetric constraints.
  46 :- sol(X1,Y1,S), sol(X2,Y2,S), sameSubSquare(X1,Y1,X2,Y2), lessThan(X1,Y1,X2,Y2).
  47 
  48 % Hardcode boxes for 9x9
  49 subrange(X,1) :- X > 0, X <= 3, symbol(X), size(9).
  50 subrange(X,2) :- X > 3, X <= 6, symbol(X), size(9).
  51 subrange(X,3) :- X > 6, X <= 9, symbol(X), size(9).
  52 
  53 % Hardcode boxes for 25x25
  54 subrange(X,1) :- X > 0, X <= 5, symbol(X), size(25).
  55 subrange(X,2) :- X > 5, X <= 10, symbol(X), size(25).
  56 subrange(X,3) :- X > 10, X <= 15, symbol(X), size(25).
  57 subrange(X,4) :- X > 15, X <= 20, symbol(X), size(25).
  58 subrange(X,5) :- X > 20, X <= 25, symbol(X), size(25).
  59 
  60 sameSubSquare(X1,Y1,X2,Y2) :- subrange(X1,XS), subrange(X2,XS), subrange(Y1,YR), subrange(Y2,YR).
  61 
  62 
  63 % Differing pairs.
  64 % The presence of sameSubSquare(X1,Y1,X2,Y2) in the body limits the generation
  65 % only to the the relevant tuples.
  66 lessThan(X1,Y1,X2,Y2) :- X1 < X2, sameSubSquare(X1,Y1,X2,Y2).
  67 lessThan(X1,Y1,X1,Y2) :- Y1 < Y2, sameSubSquare(X1,Y1,X1,Y2).

Attached Files

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