# Translate in dzn format from an original SPOT instance # Usage: awk -f spot2dzn.awk 8.spot > 8.dzn function enumerate(tuple,depth,i) { if (depth>$1) { if (!(tuple in forbid)) { nbtuple++; constraint = constraint "," substr(tuple,2) ""; } } else { for (i=1;i<=domainsize[id[$(1+depth)]];i++) { enumerate(tuple "," domains[id[$(1+depth)],i], depth + 1); } } } BEGIN { n = 0; costs = ""; i = 0; c2 = 0; cum2 = 0; c3 = 0; cum3 = 0; j = 0; } FNR == 1 { n = $1; } FNR>=2 && FNR<=1+n { i++; costs = costs "," $2; id[$1] = i; dom = "0"; domainsize[i] = 1+$3; d = 0; d++; domains[i,d] = 0; for (v=4; v<=3+2*$3; v+=2) { d++; iddom[i "," $v] = d; domains[i,d] = $v; dom = dom "," $v; if ($v > maxd) maxd = $v; } doms = doms ",{" dom "}"; } FNR==2+n { c= $1; } FNR>=3+n && FNR<=2+n+c && NF > 1+$1 { delete forbid; for (t=0; t<(NF-$1-1)/$1; t++) { tuple = ""; for (v=2+$1+t*$1; v<2+$1+(t+1)*$1; v++) { tuple = tuple "," $v; } forbid[tuple] = 1; } constraint = ""; nbtuple = 0; enumerate("",1); if($1==2) { c2++; nbtuples2 = nbtuples2 "," nbtuple; cumtuples2 = cumtuples2 "," cum2; cum2 += nbtuple; scopes2x = scopes2x "," id[$2]; scopes2y = scopes2y "," id[$3]; constraints2 = constraints2 "," substr(constraint,2) ""; } else if($1==3) { c3++; nbtuples3 = nbtuples3 "," nbtuple; cumtuples3 = cumtuples3 "," cum3; cum3 += nbtuple; scopes3x = scopes3x "," id[$2]; scopes3y = scopes3y "," id[$3]; scopes3z = scopes3z "," id[$4]; constraints3 = constraints3 "," substr(constraint,2) ""; } else { print "Wrong arity!" $1; } } END { print "num_variables= " n ";"; print "min_domain = 0;"; print "max_domain = " maxd ";"; print "domains = [" substr(doms,2) "];"; print "costs = [" substr(costs,2) "];"; print "num_constraints2= " c2 ";"; print "max_constraints2 = " cum2*2 ";"; print "scopes2x = [" substr(scopes2x,2) "];"; print "scopes2y = [" substr(scopes2y,2) "];"; print "num_tuples2 = [" substr(nbtuples2,2) "];"; print "cum_tuples2 = [" substr(cumtuples2,2) "];"; print "constraints2 = [" substr(constraints2,2) "];"; print "num_constraints3= " c3 ";"; print "max_constraints3 = " cum3*3 ";"; print "scopes3x = [" substr(scopes3x,2) "];"; print "scopes3y = [" substr(scopes3y,2) "];"; print "scopes3z = [" substr(scopes3z,2) "];"; print "num_tuples3 = [" substr(nbtuples3,2) "];"; print "cum_tuples3 = [" substr(cumtuples3,2) "];"; print "constraints3 = [" substr(constraints3,2) "];"; }