{"id":"informatyka-2026-maj-matura-rozszerzona/zad/3","paper_id":"informatyka-2026-maj-matura-rozszerzona","number":"3","points":9,"ptype":"closed","subject":"informatyka","category":"matura","year":2026,"month":"maj","level":"rozszerzona","text":"Zadanie 3. Pary słów\nW pliku tekstowym pary.txt znajduje się 500 par słów złożonych z liter alfabetu\nangielskiego a, b, …, z. Każda para słów jest zapisana w osobnym wierszu. Słowa w wierszu\nsą oddzielone pojedynczym odstępem, a długość każdego z nich nie przekracza 50 znaków.\nPierwszych pięć wierszy pliku pary.txt zawiera następujące pary słów:\nbcba babb\nabaa ccc\nbcb abbba\nbca cdd\naadc ddcdccaba\nNapisz program (lub kilka programów), który(-e) znajdzie(-ą) i da(dzą) odpowiedzi do\npodanych zadań. Odpowiedzi do poszczególnych zadań zapisz w pliku wyniki3.txt.\nKażdą odpowiedź poprzedź numerem oznaczającym zadanie.\nDo dyspozycji masz plik pary_przyklad.txt, który zawiera 500 par słów. Odpowiedzi\ndla tego pliku podano w treściach zadań. Możesz sprawdzać na nim działanie swojego\nprogramu.\nUwaga: Pamiętaj, że Twój program musi ostatecznie działać na pliku pary.txt.","answer":"A","answer_text":"A(3, 4), A(6, 2), A(12, 1)","solution":"Odpowiedź: **3.1.** `gpeeazeugmvsbzwsrxfplqdbakoxxe lhpbmoirdm` — wartość **2206** **3.2.** `aacbcccaacacbcabac cccccaaaacaccbabcba` — suma **18** **3.3.** Siedem par: ``` bbbbaabbababbaaaa baaaaabaaabbbabab 5 aababbbababbbbbbaab bbbbaabbababababa 7 aaaababaaaabbbb aabbbbbabbbaaaa 6 bbbbabaaabbbabb aaababaabbbbbbba 5 ccccabacbba acbbabcbcbcbaa 5 caabbccabccc cabccccabbaac 6 abaacabcccccabbbc abbbcbbbbbcabaca 5 ```\n\nTreść zadania (CKE)\n\n3.1 — suma kodów ASCII\n\n```python\nnajw = 0\npara = None\nfor wiersz in open('pary.txt'):\ns1, s2 = wiersz.split()\nr = abs(sum(map(ord, s1)) - sum(map(ord, s2)))\nif r > najw:\nnajw, para = r, (s1, s2)\nprint(*para, najw)\n```\n\n3.2 — wspólne wystąpienia liter\n\nDla każdej litery bierzemy minimum z liczby wystąpień w obu słowach:\n\n```python\nfrom collections import Counter\n\nnajw = 0\npara = None\nfor wiersz in open('pary.txt'):\ns1, s2 = wiersz.split()\nc1, c2 = Counter(s1), Counter(s2)\nsuma = sum(min(c1[x], c2[x]) for x in set(c1) & set(c2))\nif suma > najw:\nnajw, para = suma, (s1, s2)\nprint(*para, najw)\n```\n\nBez Counter wystarczy tablica 26 liczników na słowo — zgodnie z duchem zadania.\n\n3.3 — prefiksosufiks w obu kierunkach\n\n```python\ndef najdluzszy(s1, s2):\nbest = 0\nfor k in range(1, min(len(s1), len(s2)) + 1):\nif s1[:k] == s2[-k:]: # początek s1 = koniec s2\nbest = max(best, k)\nif s2[:k] == s1[-k:]: # początek s2 = koniec s1\nbest = max(best, k)\nreturn best\n\nfor wiersz in open('pary.txt'):\ns1, s2 = wiersz.split()\nd = najdluzszy(s1, s2)\nif d >= 5:\nprint(s1, s2, d)\n```\n\nZłożoność O(n·L²) przy 500 parach i słowach do 50 znaków jest w zupełności wystarczająca — nie trzeba tu KMP ani haszowania.\n\nPunktacja CKE\n\n- 3.1. 2 pkt — para i wartość; 1 pkt — tylko jedno z nich.\n- 3.2. 3 pkt, w tym 2 pkt za parę słów i 1 pkt za liczbę.\n- 3.3. 4 pkt.\n- Razem: 9 pkt.\n\nTypowy błąd: **3.2 — najczęstszy błąd to zliczanie sumy zamiast minimum.** Definicja mówi `min(d(x,s1), d(x,s2))`, czyli ile razy litera występuje **w obu** słowach jednocześnie. Dla `adabbcdde` i `aadabbbccdc` litera `b` występuje 2 i 3 razy → wkład **2**, nie 5. **3.3 — prefiksosufiks działa w dwie strony.** To nie jest tylko „początek s1 = koniec s2\". Trzeba sprawdzić **oba kierunki** i wziąć dłuższy z nich. W przykładzie z arkusza `abbaabaa` / `baabaabba` najdłuższy (`baabaa`, długość 6) pochodzi z kierunku „początek s2 = koniec s1\" — kto sprawdza tylko jeden kierunek, znajdzie `abba` o długości 4 i odrzuci parę. **Uwaga na warunek „co najmniej 5\".** Para z prefiksosufiksem długości dokładnie 5 **spełnia** warunek. **Bez pliku źródłowego nie da się odtworzyć wyników.** Plik `pary.txt` uczeń dostaje na egzaminie; powyższe odpowiedzi pochodzą z oficjalnych zasad oceniania CKE. Sens tego zadania to ćwiczenie **algorytmu**, nie zapamiętanie liczb.","image":"img/informatyka-2026-maj-matura-rozszerzona/zad-3.webp","solution_image":null,"topics":"przetwarzanie plikow, kody ASCII, prefiksosufiks, algorytmy na slowach","page_from":10,"source":"ocr","answer_source":"ocr","answer_text_source":"ocr","solution_source":"maturaonline","text_source":"ocr","source_label":"Informatyka · Matura · maj 2026 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Zadanie 3. Pary słów<br>W pliku tekstowym pary.txt znajduje się 500 par słów złożonych z liter alfabetu<br>angielskiego a, b, …, z. Każda para słów jest zapisana w osobnym wierszu. Słowa w wierszu<br>są oddzielone pojedynczym odstępem, a długość każdego z nich nie przekracza 50 znaków.<br>Pierwszych pięć wierszy pliku pary.txt zawiera następujące pary słów:<br>bcba babb<br>abaa ccc<br>bcb abbba<br>bca cdd<br>aadc ddcdccaba<br>Napisz program (lub kilka programów), który(-e) znajdzie(-ą) i da(dzą) odpowiedzi do<br>podanych zadań. Odpowiedzi do poszczególnych zadań zapisz w pliku wyniki3.txt.<br>Każdą odpowiedź poprzedź numerem oznaczającym zadanie.<br>Do dyspozycji masz plik pary_przyklad.txt, który zawiera 500 par słów. Odpowiedzi<br>dla tego pliku podano w treściach zadań. Możesz sprawdzać na nim działanie swojego<br>programu.<br>Uwaga: Pamiętaj, że Twój program musi ostatecznie działać na pliku pary.txt.</p>","answer_text_html":"<p>A(3, 4), A(6, 2), A(12, 1)</p>","solutions":[{"source":"maturaonline","label":"matura-online.pl","kind":"text","html":"<p>Odpowiedź: <strong>3.1.</strong> <code>gpeeazeugmvsbzwsrxfplqdbakoxxe lhpbmoirdm</code> — wartość <strong>2206</strong> <strong>3.2.</strong> <code>aacbcccaacacbcabac cccccaaaacaccbabcba</code> — suma <strong>18</strong> <strong>3.3.</strong> Siedem par: ``<code> bbbbaabbababbaaaa baaaaabaaabbbabab 5 aababbbababbbbbbaab bbbbaabbababababa 7 aaaababaaaabbbb aabbbbbabbbaaaa 6 bbbbabaaabbbabb aaababaabbbbbbba 5 ccccabacbba acbbabcbcbcbaa 5 caabbccabccc cabccccabbaac 6 abaacabcccccabbbc abbbcbbbbbcabaca 5 </code>``</p>\n<p>Treść zadania (CKE)</p>\n<p>3.1 — suma kodów ASCII</p>\n<p>```python<br>najw = 0<br>para = None<br>for wiersz in open(&#x27;pary.txt&#x27;):<br>s1, s2 = wiersz.split()<br>r = abs(sum(map(ord, s1)) - sum(map(ord, s2)))<br>if r &gt; najw:<br>najw, para = r, (s1, s2)<br>print(*para, najw)<br>```</p>\n<p>3.2 — wspólne wystąpienia liter</p>\n<p>Dla każdej litery bierzemy minimum z liczby wystąpień w obu słowach:</p>\n<p>```python<br>from collections import Counter</p>\n<p>najw = 0<br>para = None<br>for wiersz in open(&#x27;pary.txt&#x27;):<br>s1, s2 = wiersz.split()<br>c1, c2 = Counter(s1), Counter(s2)<br>suma = sum(min(c1[x], c2[x]) for x in set(c1) &amp; set(c2))<br>if suma &gt; najw:<br>najw, para = suma, (s1, s2)<br>print(*para, najw)<br>```</p>\n<p>Bez Counter wystarczy tablica 26 liczników na słowo — zgodnie z duchem zadania.</p>\n<p>3.3 — prefiksosufiks w obu kierunkach</p>\n<p>```python<br>def najdluzszy(s1, s2):<br>best = 0<br>for k in range(1, min(len(s1), len(s2)) + 1):<br>if s1[:k] == s2[-k:]: # początek s1 = koniec s2<br>best = max(best, k)<br>if s2[:k] == s1[-k:]: # początek s2 = koniec s1<br>best = max(best, k)<br>return best</p>\n<p>for wiersz in open(&#x27;pary.txt&#x27;):<br>s1, s2 = wiersz.split()<br>d = najdluzszy(s1, s2)<br>if d &gt;= 5:<br>print(s1, s2, d)<br>```</p>\n<p>Złożoność O(n·L²) przy 500 parach i słowach do 50 znaków jest w zupełności wystarczająca — nie trzeba tu KMP ani haszowania.</p>\n<p>Punktacja CKE</p>\n<ul><li>3.1. 2 pkt — para i wartość; 1 pkt — tylko jedno z nich.</li><li>3.2. 3 pkt, w tym 2 pkt za parę słów i 1 pkt za liczbę.</li><li>3.3. 4 pkt.</li><li>Razem: 9 pkt.</li></ul>\n<p>Typowy błąd: <strong>3.2 — najczęstszy błąd to zliczanie sumy zamiast minimum.</strong> Definicja mówi <code>min(d(x,s1), d(x,s2))</code>, czyli ile razy litera występuje <strong>w obu</strong> słowach jednocześnie. Dla <code>adabbcdde</code> i <code>aadabbbccdc</code> litera <code>b</code> występuje 2 i 3 razy → wkład <strong>2</strong>, nie 5. <strong>3.3 — prefiksosufiks działa w dwie strony.</strong> To nie jest tylko „początek s1 = koniec s2&quot;. Trzeba sprawdzić <strong>oba kierunki</strong> i wziąć dłuższy z nich. W przykładzie z arkusza <code>abbaabaa</code> / <code>baabaabba</code> najdłuższy (<code>baabaa</code>, długość 6) pochodzi z kierunku „początek s2 = koniec s1&quot; — kto sprawdza tylko jeden kierunek, znajdzie <code>abba</code> o długości 4 i odrzuci parę. <strong>Uwaga na warunek „co najmniej 5&quot;.</strong> Para z prefiksosufiksem długości dokładnie 5 <strong>spełnia</strong> warunek. <strong>Bez pliku źródłowego nie da się odtworzyć wyników.</strong> Plik <code>pary.txt</code> uczeń dostaje na egzaminie; powyższe odpowiedzi pochodzą z oficjalnych zasad oceniania CKE. Sens tego zadania to ćwiczenie <strong>algorytmu</strong>, nie zapamiętanie liczb.</p>"}]}