2. Całe zadanie: wyniki2.txt i wyniki2_5.txt

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

Pełne rozwiązanie zadań 2.2, 2.3 i 2.5 jednym programem na pliku `bin.txt`, z plikami wyników nazwanymi jak w arkuszu.

def blocks(n):
    b = 1
    previous = n % 2  # ostatnia cyfra zapisu binarnego
    n = n // 2
    while n > 0:
        digit = n % 2
        if digit != previous:  # inna cyfra niż poprzednia: zaczyna się nowy blok
            b = b + 1
            previous = digit
        n = n // 2
    return b


with open("bin.txt") as f:
    numbers = [line.strip() for line in f]  # zapisy binarne jako napisy

# 2.2 liczby z co najwyżej dwoma blokami (funkcja z zadania 2.1 na wartości liczby)
few_blocks = sum(1 for s in numbers if blocks(int(s, 2)) <= 2)

# 2.3 największa liczba: porównujemy wartości, a nie napisy (jako napisy "111" > "1000")
largest = max(numbers, key=lambda s: int(s, 2))

# 2.5 p XOR (p div 2): operator ^ działa na bitach, bin(x)[2:] to zapis binarny bez "0b"
codes = []
for s in numbers:
    p = int(s, 2)
    codes.append(bin(p ^ (p // 2))[2:])

with open("wyniki2.txt", "w", encoding="utf-8") as out:
    print("2.2", few_blocks, file=out)
    print("2.3", largest, file=out)

with open("wyniki2_5.txt", "w", encoding="utf-8") as out:
    for code in codes:
        print(code, file=out)

print(open("wyniki2.txt", encoding="utf-8").read())
print(codes[:5])

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