Skip to content

Instantly share code, notes, and snippets.

@rfprod
Last active April 22, 2017 15:44
Show Gist options
  • Save rfprod/566df3ac46921b996b100e78a5b7b4ca to your computer and use it in GitHub Desktop.
Save rfprod/566df3ac46921b996b100e78a5b7b4ca to your computer and use it in GitHub Desktop.
Spiralizer
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]]

Spiral generator based on spiral square side size.

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.

License.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment