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


function zigzag1(n) {
	j = 0::n-1
	u = J(1, n, (-1, 1))
	v = (j:*(2:*j:+3))
	v = rowshape((v,v:+1), 1)
	a = J(n, n, .)
	for (i=1; i<=n; i++) {
		a[i, .] = v[j:+i]
		v = v+u
	}
	return(a)
}
 
zigzag1(5)
        1    2    3    4    5
    +--------------------------+
  1 |   0    1    5    6   14  |
  2 |   2    4    7   13   16  |
  3 |   3    8   12   17   25  |
  4 |   9   11   18   24   31  |
  5 |  10   19   23   32   40  |
    +--------------------------+