tr(v)=if (v>=0, 1+2*v, -2*v) s = [] black(z)=my (x=tr(real(z)),y=tr(imag(z))); if (x>#s, 0, bittest(s[x],y)) flip(z)=my (x=tr(real(z)),y=tr(imag(z))); if (x>#s, s=concat(s,vector(x-#s))); s[x]=bitxor(s[x],2^y) ants = [ -1, +1 ] dirs = [ +I, +I ] nb = 0 { for (n=0, 20 000, print (n " " nb); for (i=1, #ants, if (black(ants[i]), dirs[i] /= I, dirs[i] *= I ); ); apply (z -> if (black(z), nb--, nb++); flip(z), Set(ants)); ants += dirs; ); } quit