1.3 Szach wieżą w pliku przykładowym

Matura pokazowa marzec 2022 - Matura z informatyki: arkusze krok po kroku (Python)

Zadanie 1.3 (4 pkt): wieża szachuje króla przeciwnika, gdy stoi z nim w tym samym wierszu albo kolumnie i między nimi nie ma innej bierki. Funkcja `checks` idzie od każdej wieży w czterech kierunkach po pustych polach; pierwsza napotkana bierka decyduje. Policz plansze, na których biała wieża (`W`) szachuje czarnego króla (`k`), i plansze, na których czarna wieża (`w`) szachuje białego króla (`K`). Dla pliku przykładowego: 2 0.

with open("szachy_przyklad.txt") as f:
    lines = [line.strip() for line in f]
boards = []
for k in range(0, len(lines) - 7, 9):  # 8 wierszy planszy, potem pusty wiersz
    boards.append(lines[k:k + 8])

# 1.3 od wieży idziemy w czterech kierunkach po pustych polach do pierwszej bierki
def checks(board, rook, king):
    for r in range(8):
        for c in range(8):
            if board[r][c] == rook:
                for dr, dc in ((1, 0), (-1, 0), (0, 1), (0, -1)):
                    rr, cc = r + dr, c + dc
                    while 0 <= rr < 8 and 0 <= cc < 8 and board[rr][cc] == ".":
                        rr, cc = rr + dr, cc + dc
                    if 0 <= rr < 8 and 0 <= cc < 8 and board[rr][cc] == king:
                        return True
    return False


white_checks, black_checks = 0, 0
for board in boards:
    if checks(board, "W", "k"):
        white_checks = white_checks + 1
    if checks(board, "w", "K"):
        black_checks = black_checks + 1

print("1.3", white_checks, black_checks)

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu Matura z informatyki: arkusze krok po kroku·Zaloguj się, aby zapisać postęp na koncie.