1.8 KiB
1.8 KiB
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5a23c84252665b21eecc801c | Spiral matrix | 1 | 302321 | spiral-matrix |
--description--
Produce a spiral array. A spiral array is a square arrangement of the first N2 natural numbers, where the numbers increase sequentially as you go around the edges of the array spiraling inwards. For example, given 5, produce this array:
0 1 2 3 4 15 16 17 18 5 14 23 24 19 6 13 22 21 20 7 12 11 10 9 8
--hints--
spiralArray
should be a function.
assert(typeof spiralArray == 'function');
spiralArray(3)
should return an array.
assert(Array.isArray(spiralArray(3)));
spiralArray(3)
should return [[0, 1, 2],[7, 8, 3],[6, 5, 4]]
.
assert.deepEqual(spiralArray(3), [
[0, 1, 2],
[7, 8, 3],
[6, 5, 4]
]);
spiralArray(4)
should return [[0, 1, 2, 3],[11, 12, 13, 4],[10, 15, 14, 5],[9, 8, 7, 6]]
.
assert.deepEqual(spiralArray(4), [
[0, 1, 2, 3],
[11, 12, 13, 4],
[10, 15, 14, 5],
[9, 8, 7, 6]
]);
spiralArray(5)
should return [[0, 1, 2, 3, 4],[15, 16, 17, 18, 5],[14, 23, 24, 19, 6],[13, 22, 21, 20, 7],[12, 11, 10, 9, 8]]
.
assert.deepEqual(spiralArray(5), [
[0, 1, 2, 3, 4],
[15, 16, 17, 18, 5],
[14, 23, 24, 19, 6],
[13, 22, 21, 20, 7],
[12, 11, 10, 9, 8]
]);
--seed--
--seed-contents--
function spiralArray(n) {
}
--solutions--
function spiralArray(n) {
var arr = Array(n),
x = 0,
y = n,
total = n * n--,
dx = 1,
dy = 0,
i = 0,
j = 0;
while (y) arr[--y] = [];
while (i < total) {
arr[y][x] = i++;
x += dx;
y += dy;
if (++j == n) {
if (dy < 0) {
x++;
y++;
n -= 2;
}
j = dx;
dx = -dy;
dy = j;
j = 0;
}
}
return arr;
}