object SpiralMatrixGenerator {
def generateSpiralMatrix(n: Int): Array[Array[Int]] = {
val matrix = Array.ofDim[Int](n, n)
var top = 0
var bottom = n - 1
var left = 0
var right = n - 1
var num = 1
while (top <= bottom && left <= right) {
// Fill top row
for (i <- left to right) {
matrix(top)(i) = num
num += 1
}
top += 1
// Fill right column
for (i <- top to bottom) {
matrix(i)(right) = num
num += 1
}
right -= 1
// Fill bottom row
if (top <= bottom) {
for (i <- right to left by -1) {
matrix(bottom)(i) = num
num += 1
}
bottom -= 1
}
// Fill left column
if (left <= right) {
for (i <- bottom to top by -1) {
matrix(i)(left) = num
num += 1
}
left += 1
}
}
matrix
}
def main(args: Array[String]): Unit = {
val n = 3
val matrix = generateSpiralMatrix(n)
for (row <- matrix) {
println(row.mkString(" "))
}
}
}
/*
run:
1 2 3
8 9 4
7 6 5
*/