3.3 Prefiksosufiksy
Matura maj 2026 - Matura z informatyki: arkusze krok po kroku (Python)
Zadanie 3.3 (4 pkt): prefiksosufiks to słowo, które jest początkiem jednego słowa pary i końcem drugiego (w dowolną stronę). Wycinek `s1[:k]` to pierwsze `k` liter, a `s2[-k:]` ostatnie `k` liter. Pętla sprawdza wszystkie długości od 1 do długości krótszego słowa i zapamiętuje największą pasującą. Dla pliku przykładowego jedna para: `ececdddeed dddeedd 6`.
with open("pary_przyklad.txt") as f:
pairs = [line.split() for line in f] # split() bez argumentu usuwa też koniec wiersza
# 3.1 f(s) = suma kodów ASCII znaków słowa, ord("a") = 97
def ascii_sum(word):
return sum(ord(c) for c in word)
def difference(pair):
return abs(ascii_sum(pair[0]) - ascii_sum(pair[1]))
best31 = max(pairs, key=difference)
# 3.2 wspólne wystąpienia litery: minimum z liczby wystąpień w obu słowach
def common(pair):
s1, s2 = pair
return sum(min(s1.count(x), s2.count(x)) for x in "abcdefghijklmnopqrstuvwxyz")
best32 = max(pairs, key=common)
# 3.3 prefiksosufiks długości k: początek jednego słowa = koniec drugiego
def longest_prefix_suffix(s1, s2):
best = 0
for k in range(1, min(len(s1), len(s2)) + 1):
if s1[:k] == s2[-k:] or s2[:k] == s1[-k:]:
best = k
return best
found33 = [(s1, s2, longest_prefix_suffix(s1, s2)) for s1, s2 in pairs if longest_prefix_suffix(s1, s2) >= 5]
print("3.1", *best31, difference(best31))
print("3.2", *best32, common(best32))
print("3.3")
for s1, s2, k in found33:
print(s1, s2, k)Ł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.