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


 
package 
{
   public class ZigZagMatrix extends Array
   {
 
      private var height:uint;
      private var width:uint;
      public var mtx:Array = [];
 
      public function ZigZagMatrix(size:uint)
      {
         this.height = size;
         this.width = size;
 
         this.mtx = [];
         for (var i:uint = 0; i < size; i++) { 
            this.mtx[i] = [];
         }
         i = 1;
         var j:uint = 1; 
         for (var e:uint = 0; e < size*size; e++) {
            this.mtx[i-1][j-1] = e;
            if ((i + j) % 2 == 0) {
               // Even stripes
               if (j < size) j ++;
               else       i += 2;
               if (i > 1) i --;
            } else {
               // Odd stripes
               if (i < size) i ++;
               else       j += 2;
               if (j > 1) j --;
            }
         }
      }  
   }  
}
 