%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 na 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"]