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


class ZigZag(Integer size) {
 
	value data = Array {
		for (i in 0:size)
		Array.ofSize(size, 0)
	};
 
	variable value i = 1;
	variable value j = 1;
 
	for (element in 0 : size^2) {
		data[j - 1]?.set(i - 1, element);
		if ((i + j).even) {
			if (j < size) {
				j++;
			} 
			else {
				i += 2;
			}
			if (i > 1) {
				i--;
			}
		} 
		else {
			if (i < size) {
				i++;
			} 
			else {
				j += 2;
			}
			if (j > 1) {
				j--;
			}
		}
	}
 
	shared void display() {
		for (row in data) {
			for (element in row) {
				process.write(element.string.pad(3));
			}
			print(""); //newline
		}
	}
}
 
shared void run() {
	value zz = ZigZag(5);
	zz.display();
}