JSFiddle - React, Tailwind, and code Playground
by SanjayVyas
JavaScript
//% Fill and odd size array with spiralling values
//# [Sanjay Vyas]
const spiral = (size) => {
if (size < 3 || !(size % 2)) throw Error("Size must be odd number >= 3");
const matrix = Array.from(Array(size), () => Array.from(Array(size), () => 0));
let row = Math.floor(size / 2);
let col = row;
let direction = 0;
let value = 1;
while (value <= size * size) {
do {
matrix[row][col] = value++;
row += [0, 1, 0, -1][direction];
col += [1, 0, -1, 0][direction];
} while (matrix[row + [1, 0, -1, 0][direction]][col + [0, -1, 0, +1][direction]]);
direction = ++direction % 4;
}
let line;
const maxWidth = (size * size).toString().length + 1;
for (let r = 0; r < size; r++) {
line = "";
for (let c = 0; c < size; c++) {
line += matrix[r][c].toString().padStart(maxWidth, ' ');
}
console.log(line);
}
}
spiral(9);