allocate mem(2^30) \\ y \\ +-+-+-+-+ \\ . +-+-+-+-+ . 5 \\ | | \\ | | \\ . +-+-+-+-+ . 3 \\ . +-+-+-+-+ . 2 \\ | | | \\ | | | \\ . +-+-+-+-+ . 0 \\ . . . . . \\ x = 0 1 2 3 neighbours(z) = { my (x=real(z)%4, y=imag(z)%6); if (y==0 && x==0, return ([z-1, z+1, z+2*I, z-I]), y==0 && x==1, return ([z-1, z+1, z-I]), y==0 && x==2, return ([z-1, z+1, z+2*I, z-I]), y==0 && x==3, return ([z-1, z+1, z-I]), y==2 && x==0, return ([z-1, z+1, z+I, z-2*I]), y==2 && x==1, return ([z-1, z+1, z+I ]), y==2 && x==2, return ([z-1, z+1, z+I, z-2*I]), y==2 && x==3, return ([z-1, z+1, z+I ]), y==3 && x==0, return ([z-1, z+1, z-I]), y==3 && x==1, return ([z-1, z+1, z+2*I, z-I]), y==3 && x==2, return ([z-1, z+1, z-I]), y==3 && x==3, return ([z-1, z+1, z+2*I, z-I]), y==5 && x==0, return ([z-1, z+1, z+I ]), y==5 && x==1, return ([z-1, z+1, z+I, z-2*I]), y==5 && x==2, return ([z-1, z+1, z+I ]), y==5 && x==3, return ([z-1, z+1, z+I, z-2*I]), print("*** " z); quit); } all = Set() cur = Set([0]) \\ tetravalent cur = Set([1]) \\ trivalent { for (n=0, 1 000, print (n " " #cur); all = set union(all, cur); cur = set minus(Set(concat(apply(neighbours, cur))), all); ); } quit