import Foundation
func printMatrixInSpiralForm(_ matrix: [[Int]]) {
guard !matrix.isEmpty else { return }
var top = 0
var bottom = matrix.count - 1
var left = 0
var right = matrix[0].count - 1
while true {
if left > right { break }
// Top row
for i in left...right {
print("\(matrix[top][i]) ", terminator: "")
}
print()
top += 1
if top > bottom { break }
// Right column
for i in top...bottom {
print("\(matrix[i][right]) ", terminator: "")
}
print()
right -= 1
if left > right { break }
// Bottom row
for i in stride(from: right, through: left, by: -1) {
print("\(matrix[bottom][i]) ", terminator: "")
}
print()
bottom -= 1
if top > bottom { break }
// Left column
for i in stride(from: bottom, through: top, by: -1) {
print("\(matrix[i][left]) ", terminator: "")
}
print()
left += 1
}
}
let matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
]
printMatrixInSpiralForm(matrix)
/*
run:
1 2 3 4
8 12 16
15 14 13
9 5
6 7
11
10
*/