% % Predicate contains in MiniZinc. % % contains is a predicate for arrays which corresponds to "in" for sets. % % This MiniZinc model was created by Hakan Kjellerstrand, hakank@bonetmail.com % See also my MiniZinc page: http://www.hakank.org/minizinc % % include "globals.mzn"; int: n = 10; array[1..n] of var 0..n: x; var 0..n: el; var int: num; % % array <-> number % predicate toNum(array[int] of var int: number, var int: num_sum, float: base) = let { int: len = length(number) } in num_sum = sum(i in 1..len) ( ceil(pow(base, int2float(len-i))) * number[i] ) /\ forall(i in 1..len) (number[i] >= 0) ; % % does a contains e? % predicate contains(var int: e, array[int] of var int: a) = exists(i in 1..length(a)) ( a[i] = e ) ; solve satisfy; % solve :: int_search(x, "first_fail", "indomain", "complete") satisfy; constraint %el = 7 %/\ %x = [0,1,1,3,4,5,6,7,7,9] %/\ % not(contains(el, x)) contains(el, x) /\ toNum(x, num, 10.0) /\ num = 1234121 ;