this repo has no description
1include "alldifferent.mzn";
2
3int: S;
4int: N = S * S;
5int: digs = ceil(log(10.0,int2float(N))); % digits for output
6
7set of int: PuzzleRange = 1..N;
8set of int: SubSquareRange = 1..S;
9
10array[1..N,1..N] of 0..N: start; %% initial board 0 = empty
11array[1..N,1..N] of var PuzzleRange: puzzle;
12
13% fill initial board
14constraint forall(i,j in PuzzleRange)(
15 if start[i,j] > 0 then puzzle[i,j] = start[i,j] else true endif );
16
17% All different in rows
18constraint forall (i in PuzzleRange) (
19 alldifferent( [ puzzle[i,j] | j in PuzzleRange ]) );
20
21% All different in columns.
22constraint forall (j in PuzzleRange) (
23 alldifferent( [ puzzle[i,j] | i in PuzzleRange ]) );
24
25% All different in sub-squares:
26constraint
27 forall (a, o in SubSquareRange)(
28 alldifferent( [ puzzle[(a-1) *S + a1, (o-1)*S + o1] |
29 a1, o1 in SubSquareRange ] ) );
30
31solve satisfy;
32
33output [ show_int(digs,puzzle[i,j]) ++ " " ++
34 if j mod S == 0 then " " else "" endif ++
35 if j == N then
36 if i != N then
37 if i mod S == 0 then "\n\n" else "\n" endif
38 else "" endif else "" endif
39 | i,j in PuzzleRange ] ++ ["\n"];