freeCodeCamp Challenge Guide: Zig-zag matrix

Zig-zag matrix


Solutions

Solution 1 (Click to Show/Hide)
function ZigZagMatrix(n) {
  // early exit for small input
  if (n <= 0)
    return [];
  else if (n === 1)
    return [[0]];

  // setup
  const matrix = Array(n)
    .fill(0)
    .map(_ => Array(n).fill(0));
  let i = 0, j = 0;
  let zig = 0, zag = 0;

  // zig-zag through the array
  for (let entry = 0; entry < n*n; entry++) {
    matrix[i += zig][j += zag] = entry;
    if (i === n - 1) {          // bottom
      matrix[i][++j] = ++entry;
      zig = -1, zag =  1;
    } else if (j === n - 1) {   // right
      matrix[++i][j] = ++entry;
      zig =  1, zag = -1;
    } else if (i === 0) {       // top
      matrix[i][++j] = ++entry;
      zig =  1, zag = -1;
    } else if (j === 0) {       // left
      matrix[++i][j] = ++entry;
      zig = -1, zag =  1;
    }
  }
  return matrix;
}