15 lines
903 B
Text
15 lines
903 B
Text
%Fraction Reduction. Nigel Galloway, September 5th., 2019
|
|
include "alldifferent.mzn"; include "member.mzn";
|
|
int: S;
|
|
array [1..9] of int: Pn=[1,10,100,1000,10000,100000,1000000,10000000,100000000];
|
|
array [1..S] of var 1..9: Nz; constraint alldifferent(Nz);
|
|
array [1..S] of var 1..9: Gz; constraint alldifferent(Gz);
|
|
var int: n; constraint n=sum(n in 1..S)(Nz[n]*Pn[n]);
|
|
var int: i; constraint i=sum(n in 1..S)(Gz[n]*Pn[n]); constraint n<i; constraint n*g=i*e;
|
|
var int: g; constraint g=sum(n in 1..S)(if n=a then 0 elseif n>a then Gz[n]*Pn[n-1] else Gz[n]*Pn[n] endif);
|
|
var int: e; constraint e=sum(n in 1..S)(if n=l then 0 elseif n>l then Nz[n]*Pn[n-1] else Nz[n]*Pn[n] endif);
|
|
var 1..S: l; constraint Nz[l]=w;
|
|
var 1..S: a; constraint Gz[a]=w;
|
|
var 1..9: w; constraint member(Nz,w) /\ member(Gz,w);
|
|
|
|
output [show(n)++"/"++show(i)++" becomes "++show(e)++"/"++show(g)++" when "++show(w)++" is omitted"]
|