small values = vector(4, i, []) see index(z) = { my (s=1, x=real(z), y=imag(z)); if (x<1, s += 1; x = 1-x; ); if (y<0, s += 2; y = -y; ); return ([s,x,y]); } see(z) = { my (index = see index(z)); if (#small values[index[1]] < index[2], small values[index[1]] = concat(small values[index[1]], vector(index[2] - #small values[index[1]])) ); small values[index[1]][index[2]] = bit or(small values[index[1]][index[2]], 2^index[3]) } seen(z) = { my (index = see index(z)); if (#small values[index[1]] < index[2], return (0), return (bit test(small values[index[1]][index[2]], index[3])) ); } N = 2 pos = 0 recent = vector(N) other(n) = { see(pos); f = Set(recent); for (k=1, oo, if (!set search(f,k) && !seen(pos + I^n*k), recent[1 + (n%#recent)] = k; pos += I^n*k; return (k); ); ); } for (n=1, 60 000, print (n " " other(n))) quit