\\ 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=(1+I)*2^(k-1), zz=x%w + y%w*I); if (zz==m, return (z-I), zz==m-1-I, return (z+I), zz==m-I, return (z-1), zz==m+1-I, return (z+I), zz==m-2, return (z-I), zz==m-1-2*I, return (z+1) ); ); 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=(1+I)*2^(k-1), zz=x%w + y%w*I); if (zz==m-I, return (z+I), zz==m-1-I, return (z+1), zz==m-1, return (z-I), zz==m-2-I, return (z+I), zz==m-2*I, return (z-1), zz==m+1, 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 " " imag(z)); if (imag(z)==128, break); z = moveb(z); ); } quit