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 = zigzag1(n)
  j = 1:n;
  u = repmat([-1; 1], n, 1);
  v = j.*(2*j-3);
  v = reshape([v; v+1], 2*n, 1);
  a = zeros(n, n);
  for i = 1:n
    a(:, i) = v(i+j);
    v += u;
  endfor
endfunction
 
function a = zigzag2(n)
  a = zigzag1(n);
  v = (1:n-1)'.^2;
  for i = 2:n
    a(n+2-i:n, i) -= v(1:i-1);
  endfor
endfunction
 
>> zigzag2(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