/usr/share/mozart/examples/fd/magic-sequence.oz is in mozart-doc 1.4.0-8ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | %%%
%%% Authors:
%%% Christian Schulte <schulte@ps.uni-sb.de>
%%% Gert Smolka <smolka@ps.uni-sb.de>
%%%
%%% Copyright:
%%% Christian Schulte, 1998
%%% Gert Smolka, 1998
%%%
%%% Last change:
%%% $Date: 1999-01-18 22:56:07 +0100 (Mon, 18 Jan 1999) $ by $Author: schulte $
%%% $Revision: 10513 $
%%%
%%% This file is part of Mozart, an implementation
%%% of Oz 3
%%% http://www.mozart-oz.org
%%%
%%% See the file "LICENSE" or
%%% http://www.mozart-oz.org/LICENSE.html
%%% for information on usage and redistribution
%%% of this file, and for a DISCLAIMER OF ALL
%%% WARRANTIES.
%%%
%%% Given N, find S=(X_0,...,X_N-1) such that
%%% - X_i in 0..N-1
%%% - i occurs X_i-times in S
declare
fun {MagicSequence N}
Cs = {List.number ~1 N-2 1}
in
proc {$ S}
{FD.tuple sequence N 0#N-1 S}
{For 0 N-1 1
proc {$ I} {FD.exactly S.(I+1) S I} end}
{FD.sum S '=:' N} % redundant
%% redundant: sum (i-1)*X_i = 0 (since sum i*X_i = sum X_i)
{FD.sumC Cs S '=:' 0}
{FD.distribute ff S}
%% Also try the following
%% {FD.distribute splitMin S}
end
end
{ExploreAll {MagicSequence 17}}
%% Conjecture: for N>5 is X_0 = N-3
%% case N>5 then S.1=N-3 else skip end
|