att vara langford

MiniZinc model

include "globals.mzn";

int: k;
set of int: positionDomain = 1..2*k;
array[1..k] of string: s;
array[positionDomain] of var positionDomain: position;
array[positionDomain] of var 1..k: solution;
solve satisfy;

constraint
  forall(i in 1..k) (
     position[i+k] = position[i] + i+1 /\
     solution[position[i]] = i /\ 
     solution[position[k+i]] = i
  ) /\   
  all_different(position) /\
  solution[1] > solution[2*k]
;

output 
[
  if i = 1 then "<li>" else "" endif ++ 
    show(s[fix(solution[i])]) ++ " "
  | i in 1..2*k

]
++["\n"]++
[
  if i = 1 then "<br>" else "" endif ++ 
    show(solution[i]) ++ " "
  | i in 1..2*k
];

k = 8;
s = ["att","vara","eller","inte","vara","det","är","frågan"];

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