this repo has no description
1include "inverse.mzn";
2
3int: n;
4
5array[1..n] of var 1..n: x; % sequence of numbers
6array[1..n-1] of var 1..n-1: u; % sequence of differences
7
8constraint forall(i in 1..n-1)(u[i] = abs(x[i+1] - x[i]));
9
10array[1..n] of var 1..n: y; % position of each number
11array[1..n-1] of var 1..n-1: v; % position of difference i
12
13constraint inverse(x,y);
14constraint inverse(u,v);
15
16constraint abs(y[1] - y[n]) = 1 /\ v[n-1] = min(y[1], y[n]);
17
18solve :: int_search(y, first_fail, indomain_min)
19 satisfy;
20
21output ["x = ",show(x),"\n"];