Spiral size 5:
00000
....0
000.0
0...0
00000
and size 10:
0000000000
.........0
00000000.0
0......0.0
0.0000.0.0
0.0..0.0.0
0.0....0.0
0.000000.0
0........0
0000000000
A script by V.
function spiralize(size) { | |
let spiral = []; | |
for (let i = 0; i < size; i++) { // init spiral | |
spiral.push([]); | |
for (let j = 0; j < size; j++) { | |
let val = (i === 0 || i === size - 1) ? 1 : 0; | |
if (i > 0 && i < size - 1) { | |
val = (j === size - 1) ? 1 : val; | |
val = (i !== 1 && j === 0) ? 1 : val; | |
} | |
spiral[i].push(val); | |
} | |
} | |
//console.log(spiral); | |
let curPos = [2, 1]; | |
let reached = false; | |
while (!reached) { | |
while (spiral[curPos[0]][curPos[1] + 1] !== 1 && !reached) { // move right | |
//console.log('move right, curPos:', curPos); | |
spiral[curPos[0]][curPos[1]] = 1; | |
if (spiral[curPos[0]][curPos[1] + 2] === 1 && | |
spiral[curPos[0]][curPos[1] - 2] === 1 && | |
spiral[curPos[0] + 2][curPos[1]] === 1 && | |
spiral[curPos[0] - 2][curPos[1]] === 1) { | |
//console.log('ending reached'); | |
reached = true; | |
//console.log(spiral); | |
} | |
curPos[1]++; | |
//console.log('move right, next value', spiral[curPos[0]][curPos[1] + 1], ', curPos update:', curPos); | |
} | |
//console.log(spiral); | |
curPos[1]--; | |
while (spiral[curPos[0] + 1][curPos[1]] !== 1 && !reached) { // move down | |
//console.log('move down, curPos:', curPos); | |
spiral[curPos[0]][curPos[1]] = 1; | |
if (spiral[curPos[0]][curPos[1] + 2] === 1 && | |
spiral[curPos[0]][curPos[1] - 2] === 1 && | |
spiral[curPos[0] + 2][curPos[1]] === 1 && | |
spiral[curPos[0] - 2][curPos[1]] === 1) { | |
//console.log('ending reached'); | |
reached = true; | |
//console.log(spiral); | |
} | |
curPos[0]++; | |
//console.log('move down, next value', spiral[curPos[0] + 1][curPos[1]], ', curPos update:', curPos); | |
} | |
//console.log(spiral); | |
curPos[0]--; | |
while (spiral[curPos[0]][curPos[1] - 1] !== 1 && !reached) { // move left | |
//console.log('move left, curPos:', curPos); | |
spiral[curPos[0]][curPos[1]] = 1; | |
//console.log('diagonal square', spiral[curPos[0] - 1][curPos[1] - 1]); | |
if ((spiral[curPos[0]][curPos[1] + 2] === 1 && | |
spiral[curPos[0]][curPos[1] - 2] === 1 && | |
spiral[curPos[0] + 2][curPos[1]] === 1 && | |
spiral[curPos[0] - 2][curPos[1]] === 1) || | |
spiral[curPos[0] - 1][curPos[1] - 1] === 1) { | |
//console.log('ending reached'); | |
reached = true; | |
//console.log(spiral); | |
} | |
curPos[1]--; | |
//console.log('move left, next value', spiral[curPos[0]][curPos[1] - 1], ', curPos update:', curPos); | |
} | |
//console.log(spiral); | |
curPos[1]++; | |
while (spiral[curPos[0] - 1][curPos[1]] !== 1 && !reached) { // move up | |
//console.log('move up, curPos:', curPos); | |
spiral[curPos[0]][curPos[1]] = 1; | |
if (spiral[curPos[0]][curPos[1] + 2] === 1 && | |
spiral[curPos[0]][curPos[1] - 2] === 1 && | |
spiral[curPos[0] + 2][curPos[1]] === 1 && | |
spiral[curPos[0] - 2][curPos[1]] === 1) { | |
//console.log('ending reached'); | |
reached = true; | |
//console.log(spiral); | |
} | |
curPos[0]--; | |
//console.log('move up, next value', spiral[curPos[0] - 1][curPos[1]], ', curPos update:', curPos); | |
} | |
curPos[0]++; | |
} | |
//console.log(spiral); | |
return spiral; | |
} | |
spiralize(5); // [[1,1,1,1,1],[0,0,0,0,1],[1,1,1,0,1],[1,0,0,0,1],[1,1,1,1,1]] |