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 c:\cxpl\codes;
def N=6;
int A(N,N), X, Y, I, D;
[I:=0; X:=0; Y:=0; D:=1;
repeat  A(X,Y):=I;
        case of
         X+D>=N: [D:=-D; Y:=Y+1];
         Y-D>=N: [D:=-D; X:=X+1];
         X+D<0:  [D:=-D; Y:=Y+1];
         Y-D<0:  [D:=-D; X:=X+1]
        other    [X:=X+D; Y:=Y-D];
        I:=I+1;
until   I>=N*N;
for Y:=0 to N-1 do
    [for X:=0 to N-1 do
        [I:=A(X,Y);
        ChOut(0,^ );
        if I<10 then ChOut(0,^ );
        IntOut(0, I);
        ];
    CrLf(0);
    ];
]