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 a = zigzag3(n)
  a = zeros(n, n)
  for k=1:n
    j = modulo(k, 2)
    d = (2*j-1)*(n-1)
    m = (n-1)*(k-1)
    a(k+(1-j)*m:d:k+j*m) = k*(k-1)/2:k*(k+1)/2-1
    a(n*(n+1-k)+(1-j)*m:d:n*(n+1-k)+j*m) = n*n-k*(k+1)/2:n*n-k*(k-1)/2-1
  end
endfunction
 
-->zigzag3(5)
 ans  =
 
    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.