https://leetcode.com/problems/available-captures-for-rook/description/ Easy

Условие

На шахматной доске размером 8×8 находится одна белая ладья 'R'. Также на доске могут находиться белые слоны 'B', чёрные пешки 'p' и пустые клетки '.'.

Ладья может двигаться по правилам шахмат: она выбирает одно из четырёх направлений (вверх, вниз, влево, вправо) и движется в этом направлении до тех пор, пока не встретит препятствие (край доски, белого слона или чёрную пешку). Ладья не может проходить через белых слонов и может захватывать только чёрные пешки.

Необходимо определить, сколько чёрных пешек может захватить ладья за один ход.

Решение

class Solution {
    fun numRookCaptures(board: Array<CharArray>): Int {
        var rookRow = -1
        var rookCol = -1

        for (i in board.indices) {
            for (j in board[i].indices) {
                if (board[i][j] == 'R') {
                    rookRow = i
                    rookCol = j
                    break
                }
            }
            if (rookRow != -1) break
        }

        var captures = 0
        val directions = arrayOf(
            intArrayOf(-1, 0),
            intArrayOf(1, 0),
            intArrayOf(0, -1),
            intArrayOf(0, 1)
        )

        for (dir in directions) {
            var x = rookRow + dir[0]
            var y = rookCol + dir[1]
            while (x in 0..7 && y in 0..7) {
                when (board[x][y]) {
                    'B' -> break
                    'p' -> {
                        captures++
                        break
                    }
                }
                x += dir[0]
                y += dir[1]
            }
        }

        return captures
    }
}