Загрузка данных


def main():
    # Считываем 8 строк доски
    board = [input().rstrip() for _ in range(8)]

    # Находим позиции королей
    pos_white_king = None
    pos_black_king = None
    for i in range(8):
        for j in range(8):
            if board[i][j] == 'K':
                pos_white_king = (i, j)
            elif board[i][j] == 'k':
                pos_black_king = (i, j)

    # Вспомогательная функция проверки выхода за границы
    def on_board(x, y):
        return 0 <= x < 8 and 0 <= y < 8

    # Ходы коня
    knight_moves = [(-2, -1), (-2, 1), (-1, -2), (-1, 2),
                    (1, -2), (1, 2), (2, -1), (2, 1)]
    # Направления движения слона
    bishop_dirs = [(-1, -1), (-1, 1), (1, -1), (1, 1)]
    # Ходы короля (для проверки соседнего короля)
    king_moves = [(-1, -1), (-1, 0), (-1, 1),
                  (0, -1),          (0, 1),
                  (1, -1),  (1, 0),  (1, 1)]

    # Проверим, угрожает ли белый конь чёрному королю
    for i in range(8):
        for j in range(8):
            if board[i][j] == 'H':
                for dx, dy in knight_moves:
                    x, y = i + dx, j + dy
                    if on_board(x, y) and (x, y) == pos_black_king:
                        print("yes")
                        return
    # Проверим, угрожает ли чёрный конь белому королю
    for i in range(8):
        for j in range(8):
            if board[i][j] == 'h':
                for dx, dy in knight_moves:
                    x, y = i + dx, j + dy
                    if on_board(x, y) and (x, y) == pos_white_king:
                        print("yes")
                        return

    # Проверим угроза слонов
    # Белые слоны угрожают чёрному королю
    for i in range(8):
        for j in range(8):
            if board[i][j] == 'B':
                for dx, dy in bishop_dirs:
                    x, y = i + dx, j + dy
                    while on_board(x, y):
                        if board[x][y] != '-':
                            if (x, y) == pos_black_king:
                                print("yes")
                                return
                            break
                        x += dx; y += dy
    # Чёрные слоны угрожают белому королю
    for i in range(8):
        for j in range(8):
            if board[i][j] == 'b':
                for dx, dy in bishop_dirs:
                    x, y = i + dx, j + dy
                    while on_board(x, y):
                        if board[x][y] != '-':
                            if (x, y) == pos_white_king:
                                print("yes")
                                return
                            break
                        x += dx; y += dy

    # Проверим, не стоят ли короли рядом
    # Белый король угрожает чёрному и наоборот
    for dx, dy in king_moves:
        if pos_white_king:
            wx, wy = pos_white_king
            if on_board(wx + dx, wy + dy) and (wx + dx, wy + dy) == pos_black_king:
                print("yes")
                return

    # Если нигде нет угрозы
    print("no")

if __name__ == "__main__":
    main()


Добавил программу на Python, которая:

1. Считывает 8 строк по 8 символов (символ «-» означает пустую клетку).


2. Находит позиции белого и чёрного королей.


3. Проверяет:

Угрозы со стороны коней (белых к чёрному королю и чёрных к белому).

Угрозы со стороны слонов (диагональные атаки до первой встреченной фигуры).

Соседнее расположение королей (атака короля на короля).



4. Выводит yes, как только обнаруживается любая угроза, иначе no.



Можешь протестировать на разных расстановках и сообщить, если нужна доработка!