index(z) = { my (x=real(z), y=imag(z)); if (x>abs(y), ((2*x-1)^2) + (x+y-1), x>y, 2*-y*(1-2*y) + (x-y), y>=abs(x), 2*y*(2*y-1) + (y-x), (4*x^2) + (-y-x) ) + 1; } dz = concat((2+I)*powers(I, 3), (2-I)*powers(I, 3)) a(n) = { my (visited=0, z=0, i, di); for (v=0, oo, visited += 2^i=index(z); di = Set(digits(i, n)); my (bestz, besti=oo); for (k=1, #dz, my (zz=z+dz[k], ii=index(zz)); if (!bittest(visited, ii) && #setintersect(di, Set(digits(ii, n)))==0 && ii