N = 9; W = sum(k=2, N+1, fibonacci(k)) T = matrix(W,W, x,y, "bug") fill(minx, maxx, miny, maxy) = { my (area=(maxx-minx)*(maxy-miny)); for (x=minx, maxx-1, for (y=miny, maxy-1, T[1+x,1+y] = area; ); ); } rect = [0] \\ rectangles as [z1, z2] with z1=bottom left corner, z2=top right corner nb = 0 add(r) = { if (nb++>#rect, rect = concat(rect, vector(#rect)); ); rect[nb] = r; fill(real(r[1]), real(r[2]), imag(r[1]), imag(r[2])); if (real(r[1])!=imag(r[1]), fill(imag(r[1]), imag(r[2]), real(r[1]), real(r[2])); ); } { my (ff, f, g, k, dl, do, rrr, rr, r); ff=0; g=0; for (n=2, N, f=fibonacci(n); k=ff+(ff-g)*I; left = select(r -> real(r[2])<=real(k) && imag(r[1])>=imag(k), rect[1..nb]); dl = f+(f+g)*I; apply (r -> add([r[1]+dl, r[2]+dl]), left); add([ff*(1+I), (ff+f)*(1+I)]); ff+=g=f; ); add([ff*(1+I), (ff+fibonacci(N+1))*(1+I)]); ff=0; rrr=rr=[]; for (n=2, N, h=fibonacci(n); w=fibonacci(n+1); ff+=h; do = (w+I*h); r = [[ff, ff+w+I*h]]; r = concat(r, apply(o -> [o[1]+do, o[2]+do], rr)); r = concat(r, apply(o -> [o[1]+do, o[2]+do], rrr)); apply(add, r); [rrr,rr]=[rr,r]; ); } n=-1; for (d=1, #T, for (k=1, d, print (n++ " " T[d+1-k,k]))) quit