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


include ..\Utilitys.tlhy
 
 
%Size 5 !Size
0 ( $Size dup ) dim
 
%i 1 !i %j 1 !j
 
 
$Size 2 power [
    1 -
    ( $i $j ) set  
    $i $j + 1 band 0 == (
        [$j $Size < ( [$j 1 + !j] [$i 2 + !i] ) if
        $i 1 > [ $i 1 - !i] if ]
        [$i $Size < ( [$i 1 + !i] [$j 2 + !j] ) if
        $j 1 > [ $j 1 - !j] if ]
    ) if
] for
 
$Size [
    %row !row
    $Size [
        %col !col
        ( $row $col ) get tostr 32 32 chain chain 1 3 slice print drop
    ] for
    nl
] for
 
 
nl "End " input