Download
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
%
% Magic sequence in MiniZinc.
% Alternative version which use the global constraint distribute.
% See magic_sequence.mzn, magic_sequence2.mzn.
%
% http://www.dcs.st-and.ac.uk/~ianm/CSPLib/prob/prob019/spec.html
% """
% A magic sequence of length n is a sequence of integers x0 . . xn-1 between 0 and n-1, such that for all i in 0 to n-1, the number i occurs exactly xi times in the sequence. For instance, 6,2,1,0,0,0,1,0,0,0 is a magic sequence since 0 occurs 6 times in it, 1 occurs twice, ...
% """
%
% Model created by Hakan Kjellerstrand, hakank@gmail.com
% See also my MiniZinc page: http://www.hakank.org/minizinc
%
 
% Licenced under CC-BY-4.0 : http://creativecommons.org/licenses/by/4.0/
 
include "globals.mzn";
 
int: n =  10;
array[0..n-1] of var 0..n-1: s;
array[0..n-1] of int: value = array1d(0..n-1, [i | i in 0..n-1]); % helper for distribute
 
% solve satisfy;
solve :: int_search(s, first_fail, indomain_min, complete) satisfy;
 
constraint
   distribute(s, value, s)         /\
   sum(i in 0..n-1) (s[i])   = n   /\
   sum(i in 0..n-1) (s[i]*i) = n
;
 
 
output [
       show(s), "\n"
];