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