this repo has no description
1include "alldifferent.mzn";
2
3int: S;
4int: N = S * S;
5
6% Dígitos para la salida.
7int: digs = ceil(log(10.0,int2float(N)));
8
9set of int: PuzzleRange = 1..N;
10set of int: SubSquareRange = 1..S;
11
12% tablero inicial 0 = vacío
13array[1..N,1..N] of 0..N: start;
14array[1..N,1..N] of var PuzzleRange: puzzle;
15
16% Llenar el tablero inicial.
17constraint forall(i,j in PuzzleRange)(
18 if start[i,j] > 0 then puzzle[i,j] = start[i,j] else true endif );
19
20% Todos diferentes en las filas.
21constraint forall (i in PuzzleRange) (
22 alldifferent( [ puzzle[i,j] | j in PuzzleRange ]) );
23
24% Todos diferentes en las columnas.
25constraint forall (j in PuzzleRange) (
26 alldifferent( [ puzzle[i,j] | i in PuzzleRange ]) );
27
28% Todos diferentes en los sub-cuadrados.
29constraint
30 forall (a, o in SubSquareRange)(
31 alldifferent( [ puzzle[(a-1) *S + a1, (o-1)*S + o1] |
32 a1, o1 in SubSquareRange ] ) );
33
34solve satisfy;
35
36output [ show_int(digs,puzzle[i,j]) ++ " " ++
37 if j mod S == 0 then " " else "" endif ++
38 if j == N then
39 if i != N then
40 if i mod S == 0 then "\n\n" else "\n" endif
41 else "" endif else "" endif
42 | i,j in PuzzleRange ] ++ ["\n"];