Re: Sum or count function

Hi,

int n=10;
range r=1..n;

dvar boolean x[r];
dvar boolean start[r];
dvar int su[r];
dvar int res[r];

subject to
{

// example values

forall(i in r: i!=3 && i!=8) x[i]==1;
x[3]==0;
x[8]==0;

// end of example values

start[1]==x[1];

forall(i in r:i!=1) start[i] ==  ((x[i]==1) && (x[i-1]==0));

forall(i in r) x[i]==0 => su[i]==0;
su[1]==x[1];
forall(i in r:i!=1) x[i]==1 => su[i]==su[i-1]+1;

res[n]==su[n];
forall(i in r:i!=n) (x[i]==0) => res[i]==0;
forall(i in r:i!=n) ((x[i]==1) && (x[i+1]==0)) => res[i]==su[i];
forall(i in r:i!=n) ((x[i]==1) && (x[i+1]==1)) => res[i]==res[i+1];
}

execute
{
writeln(res);
}

gives

 

[2 2 0 4 4 4 4 0 2 2]

regards

 

PS: Many how to at https://www.linkedin.com/pulse/how-opl-alex-fleischer/

Source: Re: Sum or count function