spiralMatrix codeEval
by Igor Cuckovic
JavaScript
var spiralMatrix = function (line) {
var arr = line.split(';');
var y = +arr[0];
var x = +arr[1];
var list = arr[2].split(' ');
var calculatePositions = function (width, height) {
var myArray = [];
var generateTopRight = function (x1, y1, x2, y2) {
for (i = x1; i <= x2; i += 1) {
//myArray.push([i, y1]);
if ((width * (y1 - 1) + i) - 1 <= list.length - 1) {
myArray.push(list[(width * (y1 - 1) + i) - 1]);
}
}
for (j = y1 + 1; j <= y2; j += 1) {
//myArray.push([x2, j]);
if ((width * (j - 1) + x2) - 1 <= list.length - 1) {
myArray.push(list[(width * (j - 1) + x2) - 1]);
}
}
if ((x2 - x1) && (y2 - y1) > 0) {
generateBottomLeft(x1, y1 + 1, x2 - 1, y2);
}
};
var generateBottomLeft = function (x1, y1, x2, y2) {
for (i = x2; i >= x1; i -= 1) {
//myArray.push([i, y2]);
if ((width * (y2 - 1) + i) - 1 <= list.length - 1) {
myArray.push(list[(width * (y2 - 1) + i) - 1]);
}
}
for (j = y2 - 1; j >= y1; j -= 1) {
//myArray.push([x1, j]);
if ((width * (j - 1) + x1) - 1 <= list.length - 1) {
myArray.push(list[(width * (j - 1) + x1) - 1]);
}
}
if ((x2 - x1) && (y2 - y1) > 0) {
generateTopRight(x1 + 1, y1, x2, y2 - 1);
}
};
generateTopRight(1, 1, width, height);
return myArray;
};
return calculatePositions(x, y);
}
console.log(spiralMatrix("2;3;1 2 3 4 5 6 7 8").join(' '));