q=->a,b{m=([a,b].max**0.5).to_i+1;d=(1..m).map{[0]*m};c=0;e=[c];t=[a]
(m*m).times{|k|d[c.real][c.imag]=k+1;e<<c;c+=1i**((4*k+1)**0.5-1).to_i}
z=e[a]-e[b];x,y=z.real,z.imag
(x+=x<0?1:x>0?-1:0;y+=x<0?1:x>0?-1:0;t<<d[e[b].real+x][e[b].imag+y])while(x+y*1i).abs>0;t}
q[1,3]