Task

Produce a zig-zag array.



A   zig-zag   array is a square arrangement of the first   N2   natural numbers,   where the

numbers increase sequentially as you zig-zag along the array's   anti-diagonals.

For a graphical representation, see   JPG zigzag   (JPG uses such arrays to encode images).



For example, given   5,   produce this array:

 0  1  5  6 14
 2  4  7 13 15
 3  8 12 16 21
 9 11 17 20 22
10 18 19 23 24



Related tasks

   Spiral matrix
   Identity matrix
   Ulam spiral (for primes)


See also

   Wiktionary entry:   anti-diagonals


zz(n)={
	my(M=matrix(n,n),i,j,d=-1,start,end=n^2-1);
	while(ct--,
		M[i+1,j+1]=start;
		M[n-i,n-j]=end;
		start++;
		end--;
		i+=d;
		j-=d;
		if(i<0,
			i++;
			d=-d
		,
			if(j<0,
				j++;
				d=-d
			)
		);
		if(start>end,return(M))
	)
};