JSFiddle - React, Tailwind, and code Playground
by Tim Ko
JavaScript
function printSpiral(layers) {
var size = 2 * layers - 1;
var value = size * size;
var myMap = [];
for (var i = 0; i < size; i++) {
var row = [];
for (var j = 0; j < size; j++) {
row.push(null);
}
myMap.push(row);
}
var i = 0;
var j = size - 1;
var direction = 'left';
var justFilledIn = true;
while (true) {
if (!justFilledIn) {
justFilledIn = true;
} else {
myMap[i][j] = value--;
}
if (i == (size - 1) / 2 && j == (size - 1) / 2) {
break;
}
switch(direction) {
case 'right':
if (j + 1 >= size || myMap[i][j+1]) {
justFilledIn = false;
direction = 'up';
} else {
j++;
}
break;
case 'up':
if (i - 1 < 0 || myMap[i-1][j]) {
justFilledIn = false;
direction = 'left';
} else {
i--;
}
break;
case 'left':
if (j - 1 < 0 || myMap[i][j-1]) {
justFilledIn = false;
direction = 'down';
} else {
j--;
}
break;
case 'down':
if (i + 1 >= size || myMap[i+1][j]) {
justFilledIn = false;
direction = 'right';
} else {
i++;
}
break;
}
}
for (var i = 0; i < size; i++) {
console.log(myMap[i].join('\t'));
}
}
printSpiral(4);