zigzag1:=proc(n) uses ArrayTools; local i,u,v,a; u:=Replicate(<-1,1>,n): v:=Vector[row](1..n,i->i*(2*i-3)): v:=Reshape(,2*n): a:=Matrix(n,n): for i to n do a[...,i]:=v[i+1..i+n]; v+=u od: a end: zigzag2:=proc(n) local i,v,a; a:=zigzag1(n); v:=Vector(1..n-1,i->i^2); for i from 2 to n do a[n+2-i..n,i]-=v[1..i-1] od; a end: