2.4 Suma w zapisie symbolicznym

Matura maj 2025 - Matura z informatyki: arkusze krok po kroku (Python)

Zadanie 2.4 (3 pkt): suma wszystkich liczb dziesiętnie i w zapisie symbolami. Zamiana na system trójkowy: reszta z dzielenia przez 3 to ostatnia cyfra, dzielenie całkowite przez 3 ją usuwa. Cyfry powstają od końca, więc każdą dokleja się na początek napisu. Dla pliku przykładowego: 4841542 `+oooo****+oo+o+`. Za zapis cyframi 0, 1, 2 zamiast symboli jest tylko 1 z 2 punktów za ten element.

with open("symbole_przyklad.txt") as f:
    rows = [line.strip() for line in f]

# 2.1 palindrom: napis czytany od tyłu (row[::-1]) jest taki sam
palindromes = [row for row in rows if row == row[::-1]]

# 2.2 kwadrat 3x3: środek nie leży na brzegu, więc wiersze 1..n-2 i pozycje 1..10
squares = []
for i in range(1, len(rows) - 1):
    for j in range(1, 11):
        symbol = rows[i][j]
        if all(rows[i + di][j + dj] == symbol for di in (-1, 0, 1) for dj in (-1, 0, 1)):
            squares.append((i + 1, j + 1))  # numeracja od 1, jak w arkuszu

# 2.3 napis jako liczba trójkowa: o = 0, + = 1, * = 2
DIGITS = "o+*"


def value(row):
    result = 0
    for symbol in row:
        result = result * 3 + DIGITS.index(symbol)  # schemat Hornera
    return result


largest = max(rows, key=value)

# 2.4 suma i zamiana z powrotem: kolejne reszty z dzielenia przez 3 to cyfry od końca
total = sum(value(row) for row in rows)


def to_symbols(n):
    text = ""
    while n > 0:
        text = DIGITS[n % 3] + text
        n = n // 3
    return text or "o"

print("2.1", palindromes)
print("2.2", len(squares), squares)
print("2.3", value(largest), largest)
print("2.4", total, to_symbols(total))

Ł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.