move(z) = { my (w=max(abs(real(z)), abs(imag(z)))); if (imag(z)==-w, z+1, real(z)==-w, z-I, imag(z)==+w, z-1, z+I); } tr(n) = if (n>=0, 1+2*n, -2*n) xx = vector(1+2*M=100) yy = vector(#xx) { z=0; n=-1; while (1, x = tr(real(z)-imag(z)); y = tr(real(z)+imag(z)); if (x>#xx || y>#yy, break; ); av = bitor(xx[x], yy[y]); b = valuation(av+1,2); print (n++ " " b); xx[x] += 2^b; yy[y] += 2^b; z=move(z); ); } quit