package q130 func markI(board [][]byte, x, y int) { w, h := len(board[0]), len(board) if x < 0 || y < 0 || x >= w || y >= h || board[y][x] != 'O' { return } board[y][x] = 'I' markI(board, x, y+1) markI(board, x, y-1) markI(board, x+1, y) markI(board, x-1, y) } func solve(board [][]byte) { for i := range len(board) { markI(board, 0, i) markI(board, len(board[0])-1, i) } for i := range len(board[0]) { markI(board, i, 0) markI(board, i, len(board)-1) } for y := range board { for x := range board[0] { switch board[y][x] { case 'O': board[y][x] = 'X' case 'I': board[y][x] = 'O' } } } } var _ = solve