Files
ortools-clone/examples/flatzinc/checker_puzzle.fzn
2012-09-03 18:26:36 +00:00

16 lines
1.3 KiB
MiniZinc

array [1..4] of var 0..4: sum_rows :: output_array([1..4]);
array [1..16] of var 0..1: x :: output_array([1..4, 1..4]);
constraint int_lin_eq([1, 1, 1, 1], [x[1], x[5], x[9], x[13]], 1);
constraint int_lin_eq([1, 1, 1, 1], [x[2], x[6], x[10], x[14]], 1);
constraint int_lin_eq([1, 1, 1, 1], [x[3], x[7], x[11], x[15]], 1);
constraint int_lin_eq([1, 1, 1, 1], [x[4], x[8], x[12], x[16]], 1);
constraint int_lin_eq([1, -1, -1, -1, -1], [sum_rows[1], x[1], x[2], x[3], x[4]], 0);
constraint int_lin_eq([1, -1, -1, -1, -1], [sum_rows[2], x[5], x[6], x[7], x[8]], 0);
constraint int_lin_eq([1, -1, -1, -1, -1], [sum_rows[3], x[9], x[10], x[11], x[12]], 0);
constraint int_lin_eq([1, -1, -1, -1, -1], [sum_rows[4], x[13], x[14], x[15], x[16]], 0);
constraint int_lin_eq([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15], x[16]], 4);
constraint int_lin_ne([1], [sum_rows[1]], 1);
constraint int_lin_ne([1, 1], [sum_rows[1], sum_rows[2]], 2);
constraint int_lin_ne([1, 1, 1], [sum_rows[1], sum_rows[2], sum_rows[3]], 3);
solve :: int_search([x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15], x[16], sum_rows[1], sum_rows[2], sum_rows[3], sum_rows[4]], first_fail, indomain_min, complete) satisfy;