this repo has no description
1/***
2--- !Test
3extra_files: [sudoku_1_16x16.dzn]
4solvers: [cbc, chuffed]
5check_against: [cbc, chuffed]
6expected: !Result
7 solution: !Solution {}
8--- !Test
9extra_files: [sudoku_2_16x16.dzn]
10solvers: [cbc, chuffed]
11check_against: [cbc, chuffed]
12expected: !Result
13 solution: !Solution {}
14--- !Test
15extra_files: [sudoku_3_16x16.dzn]
16solvers: [cbc, chuffed]
17check_against: [cbc, chuffed]
18expected: !Result
19 solution: !Solution {}
20--- !Test
21extra_files: [sudoku_4_16x16.dzn]
22solvers: [cbc, chuffed]
23check_against: [cbc, chuffed]
24expected: !Result
25 solution: !Solution {}
26--- !Test
27extra_files: [sudoku_5_16x16.dzn]
28solvers: [cbc, chuffed]
29check_against: [cbc, chuffed]
30expected: !Result
31 solution: !Solution {}
32***/
33
34
35%-----------------------------------------------------------------------------%
36% Sudoku for squares of arbitrary size N = (S x S)
37%-----------------------------------------------------------------------------%
38
39%int: S=3;
40%int: N = S * S;
41%array[1..N,1..N] of int: puzzle_input=[|
42%0, 0, 0, 0, 0, 0, 0, 0, 0|
43%0, 6, 8, 4, 0, 1, 0, 7, 0|
44%0, 0, 0, 0, 8, 5, 0, 3, 0|
45%0, 2, 6, 8, 0, 9, 0, 4, 0|
46%0, 0, 7, 0, 0, 0, 9, 0, 0|
47%0, 5, 0, 1, 0, 6, 3, 2, 0|
48%0, 4, 0, 6, 1, 0, 0, 0, 0|
49%0, 3, 0, 2, 0, 7, 6, 9, 0|
50%0, 0, 0, 0, 0, 0, 0, 0, 0|
51%|];
52
53int: S;
54int: N=S*S;
55array[1..N,1..N] of int: puzzle_input;
56
57%int: S=4;
58%int: N=S*S;
59%array[1..N,1..N] of int: puzzle_input=[|
60%13, 4, 0, 16, 0, 2, 0, 0, 0, 0, 0, 0, 11, 0, 14, 10|
61%9, 12, 14, 5, 7, 0, 0, 15, 0, 0, 0, 0, 0, 2, 1, 0|
62%2, 15, 0, 6, 16, 0, 10, 9, 0, 0, 0, 0, 0, 5, 3, 0|
63%0, 0, 1, 0, 5, 0, 14, 0, 0, 0, 0, 0, 9, 6, 0, 0|
64%0, 0, 0, 0, 10, 12, 0, 5, 0, 0, 13, 0, 0, 0, 6, 8|
65%0, 0, 0, 0, 8, 0, 9, 0, 2, 0, 0, 14, 16, 0, 0, 11|
66%0, 0, 0, 0, 0, 0, 6, 7, 9, 0, 0, 0, 5, 15, 13, 12|
67%0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2, 0, 0, 3|
68%16, 9, 15, 10, 0, 0, 0, 4, 0, 6, 0, 2, 0, 0, 0, 0|
69%0, 13, 0, 3, 0, 11, 0, 0, 0, 4, 1, 16, 0, 0, 0, 0|
70%0, 0, 8, 12, 6, 7, 16, 0, 0, 5, 0, 0, 0, 0, 0, 0|
71%0, 2, 11, 0, 1, 0, 0, 0, 10, 13, 12, 0, 0, 0, 0, 0|
72%4, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 9|
73%3, 6, 0, 0, 0, 0, 0, 0, 12, 1, 11, 8, 14, 0, 0, 5|
74%0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 7, 10, 15, 11, 0, 4|
75%0, 11, 10, 1, 0, 0, 0, 0, 0, 0, 15, 9, 6, 0, 7, 0|];
76
77%int: S=5;
78%int: N=S*S;
79%array[1..N,1..N] of int: puzzle_input=[|
80%0, 12, 0, 25, 10, 0, 0, 0, 11, 24, 2, 0, 0, 0, 14, 23, 0, 9, 0, 0, 19, 0, 4, 0, 3|
81%0, 14, 0, 4, 1, 0, 15, 21, 2, 0, 0, 0, 13, 12, 0, 0, 0, 20, 24, 0, 0, 0, 8, 18, 5|
82%0, 18, 0, 9, 17, 0, 0, 6, 0, 5, 0, 0, 21, 24, 0, 19, 0, 0, 10, 16, 0, 0, 23, 0, 0|
83%16, 23, 0, 0, 0, 0, 25, 10, 14, 0, 22, 0, 0, 1, 6, 0, 7, 0, 0, 0, 0, 0, 20, 24, 0|
84%0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 19, 0, 0, 15, 0, 0, 5, 6, 0, 0, 22, 0, 0, 16, 0|
85%0, 17, 10, 0, 0, 0, 0, 0, 0, 11, 0, 12, 24, 0, 0, 6, 21, 0, 18, 0, 0, 19, 0, 0, 0|
86%0, 13, 0, 19, 0, 0, 0, 0, 21, 1, 10, 15, 22, 11, 0, 0, 16, 0, 25, 0, 23, 0, 5, 0, 0|
87%9, 22, 0, 11, 15, 12, 18, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 23, 10, 17, 0, 0, 0|
88%0, 0, 0, 2, 0, 0, 0, 24, 0, 25, 0, 13, 0, 23, 0, 0, 0, 0, 4, 0, 15, 9, 22, 0, 21|
89%0, 24, 21, 3, 23, 6, 0, 15, 0, 0, 0, 25, 18, 0, 17, 0, 0, 0, 9, 0, 14, 12, 0, 8, 0|
90%4, 15, 0, 0, 5, 0, 11, 0, 1, 0, 9, 16, 14, 10, 0, 0, 6, 17, 0, 0, 0, 13, 0, 3, 19|
91%0, 0, 0, 10, 0, 0, 0, 8, 19, 0, 0, 6, 0, 17, 0, 0, 0, 16, 0, 25, 4, 1, 0, 5, 0|
92%0, 1, 19, 13, 0, 0, 0, 25, 0, 0, 3, 2, 11, 0, 0, 12, 0, 23, 0, 0, 0, 21, 0, 0, 0|
93%0, 21, 11, 0, 0, 17, 7, 0, 5, 3, 0, 23, 8, 0, 0, 0, 1, 0, 2, 13, 0, 25, 0, 10, 14|
94%0, 0, 23, 0, 0, 4, 0, 0, 0, 14, 7, 0, 0, 25, 0, 0, 0, 24, 0, 9, 2, 0, 0, 0, 0|
95%0, 0, 0, 7, 18, 11, 5, 0, 0, 22, 0, 14, 0, 0, 0, 1, 0, 2, 20, 0, 3, 0, 19, 13, 0|
96%6, 10, 2, 14, 0, 0, 0, 20, 0, 0, 0, 0, 23, 7, 4, 0, 12, 25, 3, 0, 0, 16, 21, 17, 0|
97%15, 0, 0, 0, 11, 0, 21, 0, 0, 0, 0, 0, 17, 8, 22, 5, 18, 0, 0, 0, 7, 24, 0, 0, 0|
98%0, 0, 13, 0, 21, 1, 0, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 8|
99%0, 9, 0, 12, 0, 0, 0, 14, 7, 0, 0, 24, 0, 19, 20, 16, 0, 0, 0, 10, 0, 0, 0, 25, 18|
100%21, 25, 1, 5, 0, 0, 0, 0, 0, 2, 0, 17, 0, 14, 18, 0, 4, 0, 7, 0, 0, 0, 0, 0, 16|
101%8, 19, 0, 15, 0, 0, 9, 0, 20, 21, 25, 0, 3, 0, 11, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0|
102%0, 0, 0, 0, 2, 0, 0, 7, 0, 0, 0, 22, 0, 0, 9, 17, 14, 0, 23, 0, 8, 4, 0, 0, 6|
103%0, 4, 0, 0, 6, 18, 0, 3, 10, 17, 8, 0, 0, 0, 0, 0, 0, 0, 0, 12, 21, 22, 0, 0, 7|
104%0, 0, 17, 0, 0, 5, 0, 4, 25, 0, 12, 19, 20, 13, 0, 0, 0, 0, 0, 1, 0, 14, 9, 0, 11|];
105
106array[1..N*N] of var 1..N: puzzle;
107
108constraint forall (i in 1..N, j in 1..N) (
109 if (puzzle_input[i,j]==0) then true
110 else puzzle[(i-1)*N+j]==puzzle_input[i,j]
111 endif
112 );
113
114ann: total;
115
116function var int: eq_const(var int: x, int: d) ::total =
117 if d in dom(x) then let {
118 array[int] of var int: i2ax = int2a(x)
119 } in i2ax[d] else 0 endif;
120
121function array[int] of var int: int2a(var int: x) ::total =
122 let {
123 array[dom(x)] of var 0..1: a;
124 constraint int_lin_eq([1|i in index_set(a)],a,1);
125 constraint int_lin_eq([i|i in index_set(a)]++[-1],a++[x],0);
126 } in a;
127
128predicate alldiff(array[int] of var int: x) =
129 forall (d in dom_array(x)) (
130 int_lin_le([1|i in index_set(x)],[eq_const(x[i],d) | i in index_set(x)],1)
131 );
132
133predicate alldiff_builtin(array[int] of var int: x);
134
135 % All cells in a row, in a column, and in a subsquare are different.
136constraint
137 forall(i in 1..N)( alldiff(j in 1..N)( puzzle[(i-1)*N+j] ))
138 /\
139 forall(j in 1..N)( alldiff(i in 1..N)( puzzle[(i-1)*N+j] ))
140 /\
141 forall(i,j in 1..S)
142 ( alldiff(p,q in 1..S)( puzzle[(S*(i-1)+p-1)*N+(S*(j-1)+q)] ))
143 ;
144
145
146solve satisfy;
147
148%-----------------------------------------------------------------------------%
149%
150% The data for the puzzle that causes satz to make 1 backtrack (normally none
151% are made).
152%
153