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


   [ ]'[ tuck do dip do ]        is with2  ( x x --> x x )
 
   [ dup temp put
     [] swap
     dup * times [ i^ join ]
     sortwith
       [ with2
           [ temp share /mod
             tuck + 1 &
             if negate ]
         > ]
     sortwith
       [ with2
           [ temp share /mod + ]
         > ]
     dup witheach
       [ i^ unrot poke ]
     [] swap
     temp share times
       [ temp share split
         dip [ nested join ] ]
    drop
    temp release ]               is zigzag (   n --> [   )
 
  10 zigzag
  witheach
    [ witheach
       [ dup 10 < if sp
         echo sp ]
      cr ]