tr(v)=if (v>=0, 1+2*v, -2*v) big = 100000 s = [] S = [] seen(z)=my (x=tr(real(z)),y=tr(imag(z)));if (max(x,y)>big, setsearch(S,z), x>#s, 0, bittest(s[x],y)) see(z)=my (x=tr(real(z)),y=tr(imag(z)));if (max(x,y)>big, S=setunion(S,Set(z)); return, x>#s, s=concat(s,vector(x-#s))); s[x]=bitor(s[x],2^y) maxfreq(v) = v^2 { dir = [2 + I, 1 + 2*I, -1 + 2*I, -2 + I, -2 - I, -1 - 2*I, 1 - 2*I, 2 - I]; d = 1; rem = [maxfreq(1)]; skip = 1; z = 0; for (n=0, 10 000, see(z); print (n " " imag(z)); z += dir[d]*skip; for (v=skip, oo, if (v>#rem, rem = concat(rem, apply (maxfreq, [#rem+1..2*#rem])); ); if (rem[v] && !seen(z), rem[v]--; while (skip<=#rem && rem[skip]==0, skip++; ); break; ); z += dir[d]; ); if (d==#dir, d = 1, d++ ); ); } quit