115 lines
6.1 KiB
MiniZinc
115 lines
6.1 KiB
MiniZinc
predicate fzn_all_different_int(array [int] of var int: x);
|
|
predicate count(array [int] of var int: x, var int: y, var int: c);
|
|
predicate fixed_fzn_cumulative(array [int] of var int: s, array [int] of int: d, array [int] of int: r, int: b);
|
|
predicate global_cardinality(array [int] of var int: x, array [int] of int: cover, array [int] of var int: counts);
|
|
predicate maximum_int(var int: m, array [int] of var int: x);
|
|
predicate minimum_int(var int: m, array [int] of var int: x);
|
|
predicate sliding_sum(int: low, int: up, int: seq, array [int] of var int: vs);
|
|
predicate sort(array [int] of var int: x, array [int] of var int: y);
|
|
predicate table_bool(array [int] of var bool: x, array [int, int] of bool: t);
|
|
predicate table_int(array [int] of var int: x, array [int, int] of int: t);
|
|
predicate var_fzn_cumulative(array [int] of var int: s, array [int] of int: d, array [int] of int: r, var int: b);
|
|
array [1..12] of int: col_hint_sums = [23, 11, 30, 10, 15, 17, 7, 27, 12, 12, 16, 7];
|
|
array [1..49] of int: hints_col = [13, 15, -1, -1, 20, 21, 23, 13, 15, -1, 18, 20, 21, 23, 13, 15, 17, 18, 20, -1, -1, -1, 15, 17, -1, 20, 22, -1, -1, -1, 17, 19, 20, 22, 24, 14, 16, 17, 19, -1, 22, 24, 14, 16, 17, -1, -1, 22, 24];
|
|
array [1..49] of int: hints_row = [1, 1, -1, -1, 2, 2, 2, 3, 3, -1, 4, 4, 4, 4, 5, 5, 5, 5, 5, -1, -1, -1, 6, 6, -1, 7, 7, -1, -1, -1, 8, 8, 8, 8, 8, 9, 9, 9, 9, -1, 10, 10, 11, 11, 11, -1, -1, 12, 12];
|
|
array [1..12] of int: row_hint_sums = [16, 24, 17, 29, 35, 7, 8, 16, 21, 5, 6, 3];
|
|
array [1..49] of var 0..9: x :: output_array([1..7, 1..7]);
|
|
constraint fzn_all_different_int([x[1], x[2]]);
|
|
constraint fzn_all_different_int([x[6], x[13]]);
|
|
constraint fzn_all_different_int([x[7], x[14]]);
|
|
constraint fzn_all_different_int([x[8], x[9]]);
|
|
constraint fzn_all_different_int([x[11], x[18]]);
|
|
constraint fzn_all_different_int([x[23], x[24]]);
|
|
constraint fzn_all_different_int([x[26], x[27]]);
|
|
constraint fzn_all_different_int([x[32], x[39]]);
|
|
constraint fzn_all_different_int([x[36], x[43]]);
|
|
constraint fzn_all_different_int([x[37], x[44]]);
|
|
constraint fzn_all_different_int([x[41], x[42]]);
|
|
constraint fzn_all_different_int([x[48], x[49]]);
|
|
constraint fzn_all_different_int([x[1], x[8], x[15]]);
|
|
constraint fzn_all_different_int([x[5], x[6], x[7]]);
|
|
constraint fzn_all_different_int([x[35], x[42], x[49]]);
|
|
constraint fzn_all_different_int([x[43], x[44], x[45]]);
|
|
constraint fzn_all_different_int([x[2], x[9], x[16], x[23]]);
|
|
constraint fzn_all_different_int([x[11], x[12], x[13], x[14]]);
|
|
constraint fzn_all_different_int([x[27], x[34], x[41], x[48]]);
|
|
constraint fzn_all_different_int([x[36], x[37], x[38], x[39]]);
|
|
constraint fzn_all_different_int([x[5], x[12], x[19], x[26], x[33]]);
|
|
constraint fzn_all_different_int([x[15], x[16], x[17], x[18], x[19]]);
|
|
constraint fzn_all_different_int([x[17], x[24], x[31], x[38], x[45]]);
|
|
constraint fzn_all_different_int([x[31], x[32], x[33], x[34], x[35]]);
|
|
constraint int_eq(x[3], 0);
|
|
constraint int_eq(x[4], 0);
|
|
constraint int_eq(x[10], 0);
|
|
constraint int_eq(x[20], 0);
|
|
constraint int_eq(x[21], 0);
|
|
constraint int_eq(x[22], 0);
|
|
constraint int_eq(x[25], 0);
|
|
constraint int_eq(x[28], 0);
|
|
constraint int_eq(x[29], 0);
|
|
constraint int_eq(x[30], 0);
|
|
constraint int_eq(x[40], 0);
|
|
constraint int_eq(x[46], 0);
|
|
constraint int_eq(x[47], 0);
|
|
constraint int_lin_eq([-1, -1], [x[1], x[2]], -16);
|
|
constraint int_lin_eq([-1, -1], [x[6], x[13]], -12);
|
|
constraint int_lin_eq([-1, -1], [x[7], x[14]], -16);
|
|
constraint int_lin_eq([-1, -1], [x[8], x[9]], -17);
|
|
constraint int_lin_eq([-1, -1], [x[11], x[18]], -17);
|
|
constraint int_lin_eq([-1, -1], [x[23], x[24]], -7);
|
|
constraint int_lin_eq([-1, -1], [x[26], x[27]], -8);
|
|
constraint int_lin_eq([-1, -1], [x[32], x[39]], -7);
|
|
constraint int_lin_eq([-1, -1], [x[36], x[43]], -11);
|
|
constraint int_lin_eq([-1, -1], [x[37], x[44]], -10);
|
|
constraint int_lin_eq([-1, -1], [x[41], x[42]], -5);
|
|
constraint int_lin_eq([-1, -1], [x[48], x[49]], -3);
|
|
constraint int_lin_eq([-1, -1, -1], [x[1], x[8], x[15]], -23);
|
|
constraint int_lin_eq([-1, -1, -1], [x[5], x[6], x[7]], -24);
|
|
constraint int_lin_eq([-1, -1, -1], [x[35], x[42], x[49]], -7);
|
|
constraint int_lin_eq([-1, -1, -1], [x[43], x[44], x[45]], -6);
|
|
constraint int_lin_eq([-1, -1, -1, -1], [x[2], x[9], x[16], x[23]], -30);
|
|
constraint int_lin_eq([-1, -1, -1, -1], [x[11], x[12], x[13], x[14]], -29);
|
|
constraint int_lin_eq([-1, -1, -1, -1], [x[27], x[34], x[41], x[48]], -12);
|
|
constraint int_lin_eq([-1, -1, -1, -1], [x[36], x[37], x[38], x[39]], -21);
|
|
constraint int_lin_eq([-1, -1, -1, -1, -1], [x[5], x[12], x[19], x[26], x[33]], -27);
|
|
constraint int_lin_eq([-1, -1, -1, -1, -1], [x[15], x[16], x[17], x[18], x[19]], -35);
|
|
constraint int_lin_eq([-1, -1, -1, -1, -1], [x[17], x[24], x[31], x[38], x[45]], -15);
|
|
constraint int_lin_eq([-1, -1, -1, -1, -1], [x[31], x[32], x[33], x[34], x[35]], -16);
|
|
constraint int_lt(0, x[1]);
|
|
constraint int_lt(0, x[2]);
|
|
constraint int_lt(0, x[5]);
|
|
constraint int_lt(0, x[6]);
|
|
constraint int_lt(0, x[7]);
|
|
constraint int_lt(0, x[8]);
|
|
constraint int_lt(0, x[9]);
|
|
constraint int_lt(0, x[11]);
|
|
constraint int_lt(0, x[12]);
|
|
constraint int_lt(0, x[13]);
|
|
constraint int_lt(0, x[14]);
|
|
constraint int_lt(0, x[15]);
|
|
constraint int_lt(0, x[16]);
|
|
constraint int_lt(0, x[17]);
|
|
constraint int_lt(0, x[18]);
|
|
constraint int_lt(0, x[19]);
|
|
constraint int_lt(0, x[23]);
|
|
constraint int_lt(0, x[24]);
|
|
constraint int_lt(0, x[26]);
|
|
constraint int_lt(0, x[27]);
|
|
constraint int_lt(0, x[31]);
|
|
constraint int_lt(0, x[32]);
|
|
constraint int_lt(0, x[33]);
|
|
constraint int_lt(0, x[34]);
|
|
constraint int_lt(0, x[35]);
|
|
constraint int_lt(0, x[36]);
|
|
constraint int_lt(0, x[37]);
|
|
constraint int_lt(0, x[38]);
|
|
constraint int_lt(0, x[39]);
|
|
constraint int_lt(0, x[41]);
|
|
constraint int_lt(0, x[42]);
|
|
constraint int_lt(0, x[43]);
|
|
constraint int_lt(0, x[44]);
|
|
constraint int_lt(0, x[45]);
|
|
constraint int_lt(0, x[48]);
|
|
constraint int_lt(0, x[49]);
|
|
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], x[17], x[18], x[19], x[20], x[21], x[22], x[23], x[24], x[25], x[26], x[27], x[28], x[29], x[30], x[31], x[32], x[33], x[34], x[35], x[36], x[37], x[38], x[39], x[40], x[41], x[42], x[43], x[44], x[45], x[46], x[47], x[48], x[49]], first_fail, indomain_max, complete) satisfy;
|