crypto.fzn 2.64 KB
Newer Older
Valentin Platzgummer's avatar
Valentin Platzgummer committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
predicate 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_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_cumulative(array [int] of var int: s, array [int] of int: d, array [int] of int: r, var int: b);
var 1..26: A;
var 1..26: B;
var 1..26: C;
var 1..26: D;
var 1..26: E;
var 1..26: F;
var 1..26: G;
var 1..26: H;
var 1..26: I;
var 1..26: J;
var 1..26: K;
var 1..26: L;
var 1..26: M;
var 1..26: N;
var 1..26: O;
var 1..26: P;
var 1..26: Q;
var 1..26: R;
var 1..26: S;
var 1..26: T;
var 1..26: U;
var 1..26: V;
var 1..26: W;
var 1..26: X;
var 1..26: Y;
var 1..26: Z;
array [1..26] of var 1..26: all_letters :: output_array([1..26]) = [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z];
constraint all_different_int(all_letters);
constraint int_lin_eq([1, 1, 2], [A, J, Z], 58);
constraint int_lin_eq([1, 1, 2], [B, E, O], 53);
constraint int_lin_eq([1, 2, 1], [L, O, S], 37);
constraint int_lin_eq([2, 1, 1], [E, G, L], 66);
constraint int_lin_eq([1, 1, 1, 1], [E, L, R, Y], 47);
constraint int_lin_eq([1, 1, 1, 1], [G, N, O, S], 61);
constraint int_lin_eq([1, 1, 1, 2], [E, F, G, U], 50);
constraint int_lin_eq([1, 1, 2, 1], [C, E, L, O], 43);
constraint int_lin_eq([2, 1, 1, 1], [E, H, M, T], 72);
constraint int_lin_eq([1, 1, 1, 1, 1], [A, C, E, L, S], 51);
constraint int_lin_eq([1, 1, 1, 1, 1], [A, E, O, P, R], 65);
constraint int_lin_eq([1, 1, 1, 1, 1], [A, K, L, O, P], 59);
constraint int_lin_eq([1, 1, 1, 1, 1], [A, L, T, W, Z], 34);
constraint int_lin_eq([1, 1, 1, 1, 1], [E, F, L, T, U], 30);
constraint int_lin_eq([1, 1, 1, 2, 1], [A, B, E, L, T], 45);
constraint int_lin_eq([2, 1, 1, 1, 1], [I, L, N, O, V], 100);
constraint int_lin_eq([1, 1, 1, 1, 2, 1], [A, E, Q, R, T, U], 50);
constraint int_lin_eq([1, 1, 2, 1, 1, 1], [A, N, O, P, R, S], 82);
constraint int_lin_eq([2, 1, 1, 1, 1, 1], [C, E, N, O, R, T], 74);
constraint int_lin_eq([1, 1, 1, 1, 2, 1, 1, 1], [A, E, H, N, O, P, S, X], 134);
solve  :: int_search(all_letters, first_fail, indomain_median, complete) satisfy;