Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- include "globals.mzn";
- int: order; % this is called the length in the new problem.
- set of int: LEN = 0..order*order;
- array[1..order] of var LEN: marks;
- int: ndiffs = order*(order-1) div 2;
- array[1..ndiffs] of var LEN: diffs =
- [marks[j] - marks[i] | i in 1..order, j in i+1..order];
- % Old Golomb constraints.
- constraint increasing(marks) /\ marks[1] = 0 /\ alldifferent(diffs);
- % Break symmetry (optimisation): First difference is smaller than last one.
- constraint diffs[1] < diffs[ndiffs];
- % Extra constraint: maximize obj s.th. diffs 1..obj appear.
- var 0..ndiffs: obj;
- constraint forall(d in 1..obj)(count(diffs, d) = 1);
- solve :: int_search(marks, input_order, indomain_min, complete) maximize obj;
- output ["\(show_int(-3, order)) \(show_int(-3, obj))"] ++ [" \(x)" | x in marks] ++ ["\n"];
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement