Files
ortools-clone/examples/flatzinc/raven_puzzle.fzn

34 lines
2.7 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..5] of int: num_person_per_language = [7, 4, 2, 1, 1];
array [1..35] of var 0..1: mat :: output_array([1..7, 1..5]);
array [1..7] of var 0..5: num_lang :: output_array([1..7]);
constraint int_le(num_lang[2], num_lang[1]);
constraint int_le(num_lang[3], num_lang[2]);
constraint int_le(num_lang[4], num_lang[3]);
constraint int_le(num_lang[5], num_lang[4]);
constraint int_le(num_lang[6], num_lang[5]);
constraint int_le(num_lang[7], num_lang[6]);
constraint int_lin_eq([-1, -1, -1, -1, -1, 1], [mat[1], mat[2], mat[3], mat[4], mat[5], num_lang[1]], 0);
constraint int_lin_eq([-1, -1, -1, -1, -1, 1], [mat[6], mat[7], mat[8], mat[9], mat[10], num_lang[2]], 0);
constraint int_lin_eq([-1, -1, -1, -1, -1, 1], [mat[11], mat[12], mat[13], mat[14], mat[15], num_lang[3]], 0);
constraint int_lin_eq([-1, -1, -1, -1, -1, 1], [mat[16], mat[17], mat[18], mat[19], mat[20], num_lang[4]], 0);
constraint int_lin_eq([-1, -1, -1, -1, -1, 1], [mat[21], mat[22], mat[23], mat[24], mat[25], num_lang[5]], 0);
constraint int_lin_eq([-1, -1, -1, -1, -1, 1], [mat[26], mat[27], mat[28], mat[29], mat[30], num_lang[6]], 0);
constraint int_lin_eq([-1, -1, -1, -1, -1, 1], [mat[31], mat[32], mat[33], mat[34], mat[35], num_lang[7]], 0);
constraint int_lin_eq([1, 1, 1, 1, 1, 1, 1], [mat[1], mat[6], mat[11], mat[16], mat[21], mat[26], mat[31]], 7);
constraint int_lin_eq([1, 1, 1, 1, 1, 1, 1], [mat[2], mat[7], mat[12], mat[17], mat[22], mat[27], mat[32]], 4);
constraint int_lin_eq([1, 1, 1, 1, 1, 1, 1], [mat[3], mat[8], mat[13], mat[18], mat[23], mat[28], mat[33]], 2);
constraint int_lin_eq([1, 1, 1, 1, 1, 1, 1], [mat[4], mat[9], mat[14], mat[19], mat[24], mat[29], mat[34]], 1);
constraint int_lin_eq([1, 1, 1, 1, 1, 1, 1], [mat[5], mat[10], mat[15], mat[20], mat[25], mat[30], mat[35]], 1);
solve maximize num_lang[1];