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); } T = matrix(1+2*W=50, 1+2*W) out(z) = max(abs(real(z)), abs(imag(z)))>W get(z) = T[real(z)+W+1,imag(z)+W+1] set(z,v) = T[real(z)+W+1,imag(z)+W+1]=v a(n) = my (v=0); while (n, if (n%2==0, n\=2^valuation(n,2), my (x=valuation(n+1,2)); n\=2^x; v=max(v,x))); v { z=0; n=0; v=0; while (!out(z), if (!get(z), v++; d=move(z)-z; for (k=0, v-1, if (out(zd=z+k*d), break, set(zd, v) ); ); ); print (n++ " " get(z)); z=move(z); ); } quit