Matura informatyka maj 2026, zadanie 3 (pary słów) — rozwiązanie

Trzy podpunkty, jeden szkielet w Pythonie. Gotowe odpowiedzi dla pary.txt i kod do każdego podpunktu, plus pułapka w 3.3, która wywraca połowę rozwiązań.

Wszystkie trzy podpunkty to ten sam szkielet: pętla po wierszach pliku, split() na dwa słowa, funkcja licząca metrykę pary, trzymanie rekordu. Zmienia się wyłącznie metryka.

Arkusz CKE — maj 2026, rozszerzony

Szkielet

najlepszy = -1
wynik = None
with open('pary.txt') as f:
    for linia in f:
        s1, s2 = linia.split()
        m = metryka(s1, s2)        # ← tu wstawiasz logikę podpunktu
        if m > najlepszy:
            najlepszy = m
            wynik = (s1, s2)
print(wynik, najlepszy)

Plik ma 500 wierszy, więc zwykłe przejście po nich wystarcza z ogromnym zapasem.

Zadanie 3.1 — największa różnica sum kodów ASCII

def metryka(s1, s2):
    f1 = sum(ord(c) for c in s1)
    f2 = sum(ord(c) for c in s2)
    return abs(f1 - f2)

Kontrola na pary_przyklad.txt: eddcd eededcddceeecededcc 1403

Odpowiedź dla pary.txt:

gpeeazeugmvsbzwsrxfplqdbakoxxe lhpbmoirdm 2206

Zadanie 3.2 — największa suma wspólnych wystąpień liter

Wspólne wystąpienia litery to mniejsza z dwóch liczb wystąpień — ile razy litera jest w obu słowach jednocześnie.

from collections import Counter

def metryka(s1, s2):
    c1, c2 = Counter(s1), Counter(s2)
    return sum(min(c1[x], c2[x]) for x in set(s1) | set(s2))

Kontrola na pary_przyklad.txt: ccccdcedddddecde ccdcdddecc 10

Odpowiedź dla pary.txt:

aacbcccaacacbcabac cccccaaaacaccbabcba 18

Zadanie 3.3 — najdłuższy prefiksosufiks co najmniej 5

Prefiksosufiks to słowo będące początkiem jednego słowa i końcem drugiego. Sprawdzasz oba kierunki.

def najdluzszy_ps(s1, s2):
    best = 0
    for L in range(1, min(len(s1), len(s2)) + 1):
        if s1[:L] == s2[-L:]:
            best = L
        if s2[:L] == s1[-L:]:
            best = L
    return best

with open('pary.txt') as f:
    for linia in f:
        s1, s2 = linia.split()
        d = najdluzszy_ps(s1, s2)
        if d >= 5:
            print(s1, s2, d)

Kontrola na pary_przyklad.txt: ececdddeed dddeedd 6

Odpowiedź dla pary.txt — siedem par spełnia warunek:

bbbbaabbababbaaaa baaaaabaaabbbabab 5
aababbbababbbbbbaab bbbbaabbababababa 7
aaaababaaaabbbb aabbbbbabbbaaaa 6
bbbbabaaabbbabb aaababaabbbbbbba 5
ccccabacbba acbbabcbcbcbaa 5
caabbccabccc cabccccabbaac 6
abaacabcccccabbbc abbbcbbbbbcabaca 5

Gdzie tracisz punkty

  • 3.3 nie pyta o jedną najlepszą parę. Pyta o wszystkie pary z progiem co najmniej 5. Jeśli odruchowo użyjesz szkieletu „trzymaj maksimum", oddasz jedną parę zamiast siedmiu. To najdroższy błąd w tym zadaniu.
  • max zamiast min w 3.2. Wspólne wystąpienia to mniejsza z dwóch liczb, nie większa.
  • Prefiksosufiks mylony z palindromem albo ze wspólnym podsłowem. To początek jednego słowa pokrywający się z końcem drugiego — i sprawdzasz obie strony.
  • Pominięty plik przykładowy. Zawsze odpal najpierw na pary_przyklad.txt i porównaj z wartością kontrolną z treści. Jeśli się nie zgadza, nie ruszasz na właściwy plik.

Ten sam wzorzec w innych arkuszach

Szkielet „wczytaj plik → przetwórz wiersz → trzymaj rekord" to najczęstszy wzorzec Pythona na tej maturze:

Z tego samego arkusza: zad. 1 (rekurencja), zad. 2 (przeniesienia), zad. 5 (systemy liczbowe).


Jeden szkielet obsługuje większość zadań praktycznych z ostatnich pięciu lat. Rozpisany i przypisany do konkretnych arkuszy — Variant.

Wariant — kurs maturalnyKup kurs