DEV Community

Discussion on: Daily Challenge #98 - Make a Spiral

Collapse
 
erezwanderman profile image
erezwanderman • Edited

Javascript:

const spiral = n => {
  return Array(n)
    .fill(Array(n).fill())
    .map((x, r) =>
      x.map((y, c) => {
        return +(
          // top
          (r < n / 2 && r % 2 === 0 && c >= r - 2 && c <= n - r - 1) ||
          // right
          ((n - c) % 2 === 1 && r > n - c - 1 && r <= c) ||
          // bottom
          ((n - r) % 2 === 1 && c > n - r - 1 && c < r) ||
          // left
          (c % 2 === 0 && r > c + 1 && r < n - c)
        );
      })
    );
};

See it in action: codesandbox.io/s/hopeful-nash-wvvc...

Collapse
 
erezwanderman profile image
erezwanderman

Now I'm working on generalizing it to non square matrix

Collapse
 
erezwanderman profile image
erezwanderman
const spiral = (rowNum, colNum) => {
  return Array(rowNum)
    .fill(Array(colNum).fill())
    .map((x, r) =>
      x.map((_, c) => {
        return +(
          // top
          (r < rowNum / 2 && r % 2 === 0 && r - 2 <= c && c <= colNum - r - 1) ||
          // right
          (c > (colNum - 2) / 2 && (colNum - c) % 2 === 1 && colNum - c - 2 < r && r <= rowNum - (colNum - c)) ||
          // bottom
          (r > rowNum / 2 && (rowNum - r) % 2 === 1 && rowNum - r - 2 < c && c < colNum - (rowNum - r)) ||
          // left
          (c < (colNum - 2) / 2 && c % 2 === 0 && r > c + 1 && r < rowNum - c)
        );
      })
    );
};