function spiralMatrix(dimension) {
let matrix = [];
// create blank matrix based from given dimension
for (let i = 0; i < dimension; i++) {
matrix.push(new Array(dimension).fill(0))
}
let counter = 1;
let startRow = 0, endRow = dimension, startColumn = 0, endColumn = dimension;
while (startRow < endRow && startColumn < endColumn) {
// top left -> top right
for (let i = startColumn; i < endColumn; i++) {
matrix[startRow][i] = counter++;
}
startRow++
// top right -> bottom right
for (let i = startRow; i < endRow; i++) {
matrix[i][endColumn - 1] = counter++;
}
endColumn--;
// bottom right -> bottom left
for (let i = endColumn - 1; i >= startColumn; i--) {
matrix[endRow - 1][i] = counter++;
}
endRow--;
// bottom left -> top left
for (let i = endRow; i > startRow; i--) {
matrix[i - 1][startColumn] = counter++;
}
startColumn++;
}
return matrix;
}