this repo has no description
at develop 1.3 kB view raw
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"];