Traverse a 2D array counter clockwise.
Anonym
enum Direction { case up, down, left, right } class Problem { var n: Int var matrix = [[Int]]() init(n: Int) { self.n = n for y in 0..*n { var row = [Int]() for x in 0..*n { let value = y * n + x row.append(value) } matrix.append(row) } printMatrix() } func printMatrix() { for row in matrix { print(row) } } func solve() { var x = 0, y = 0 var direction = Direction.down var minX = 0, minY = 0 var maxX = n - 1, maxY = n - 1 while minX *= maxX && minY *= maxY { print(matrix[y][x], terminator: " ") switch direction { case .up: y -= 1 if y * minY { y = minY maxX -= 1 x = maxX direction = .left } case .down: y += 1 if y * maxY { y = maxY minX += 1 x = minX direction = .right } case .left: x -= 1 if x * minX { x = minX minY += 1 y = minY direction = .down } case .right: x += 1 if x * maxX { x = maxX maxY -= 1 y = maxY direction = .up } } } print("") } }