to be all interval | att vara all interval (diff)

MiniZinc model

include "globals.mzn";
int: n = 9;
array[1..n] of string: s = ["to", "be", "or", "not", "to", "be", "that's", "the", "question"];
array[1..n-1] of string: s2 = ["att", "vara", "eller", "inte", "vara", "det", "är", "frågan"];
array[1..n] of var 1..n: x;
array[1..n-1] of var 1..n-1: diffs;
int: sum_distinct = ((n+1)*n) div 2;
solve satisfy;
constraint      
  all_different(diffs)
  /\  
  all_different(x)
  /\ 
  forall(k in 1..n-1) (
      diffs[k] = abs(x[k+1] - x[k])
  )
  /\
  x[1] < x[n-1]
  /\
  diffs[1] < diffs[2]
;

output 
[
  if i = 1 then "<li> " else "" endif ++
    show(s[fix(x[i])]) ++ " "
  | i in 1..n
] ++
[
  if i = 1 then " | diff:  " else "" endif ++
    show(s2[fix(diffs[i])]) ++ " "
  | i in 1..n-1
];

Back to Constrained-based constraint poetry
Created by Hakan Kjellerstrand hakank@gmail.com