https://leetcode.com/problems/find-winner-on-a-tic-tac-toe-game/description/ Easy

Условие

Дано: список ходов в игре крестики-нолики на поле 3×3. Игрок A начинает первым, затем игрок B, и они поочерёдно делают ходы. Каждый ход представлен парой координат [row, col].

Необходимо определить результат игры:

• Если один из игроков победил, вернуть "A" или "B" соответственно.

• Если все клетки заполнены и никто не победил, вернуть "Draw".

• Если игра ещё не завершена, вернуть "Pending".

Решение

class Solution {
    fun tictactoe(moves: Array<IntArray>): String {
        val row = Array(2) { IntArray(3) }
        val col = Array(2) { IntArray(3) }
        val diag = IntArray(2)
        val antiDiag = IntArray(2)

        for (i in moves.indices) {
            val player = i % 2
            val r = moves[i][0]
            val c = moves[i][1]

            row[player][r]++
            col[player][c]++
            if (r == c) diag[player]++
            if (r + c == 2) antiDiag[player]++

            if (row[player][r] == 3 || col[player][c] == 3 || diag[player] == 3 || antiDiag[player] == 3) {
                return if (player == 0) "A" else "B"
            }
        }

        return if (moves.size == 9) "Draw" else "Pending"
    }
}