\\ move forward move(z) = { my (x=real(z), y=imag(z)); forstep (k=1+max(#binary(x), #binary(y)), 2, -1, my (w=2^k, m=2^(k-1)-1, zz=x%w + (y%w)*I); if (zz==m*(1+I), return (z+1), zz==(m+1)*(1+I), return (z-1), zz==m-1+(m+1)*I, return (z-I), zz==m+2+m*I, return (z+I) ); ); if (y%2==0, if (x%2==0, z+1, z+I), if (x%2==0, z-I, z-1) ); } \\ move backward moveb(z) = { my (x=real(z), y=imag(z)); forstep (k=1+max(#binary(x), #binary(y)), 2, -1, my (w=2^k, m=2^(k-1)-1, zz=x%w + (y%w)*I); if (zz==m*(1+I)+1, return (z-1), zz==(m+1)*(1+I)-1, return (z+1), zz==m-1+(m+1)*I-I, return (z+I), zz==m+2+m*I+I, return (z-I) ); ); if (y%2==0, if (x%2==0, z+I, z-1), if (x%2==0, z+1, z-I) ); } { z=0; for (n=0, oo, print (n " " real(z)); if (imag(z)==128, break); z=moveb(z); ); } quit