m Matura-Online.pl Rozwiązania zadań maturalnych
MINP-R0-100-2505 • Otwarte rozszerzone • 11 pkt • Trudność: ★★★★☆

Zadanie 2

Matura z informatyki, maj 2025, poziom rozszerzony

Wymaganie:

I.4) do realizacji rozwiązania problemu dobiera odpowiednią metodę lub technikę algorytmiczną i struktury danych. I.5) objaśnia dobrany algorytm, uzasadnia poprawność rozwiązania na wybranych przykładach danych i ocenia jego efektywność. I.7) przedstawia sposoby reprezentowania w komputerze znaków, liczb […]. I+II.1) zapisuje za pomocą listy kroków lub pseudokodu i implementuje w wybranym języku programowania algorytmy poznane na wcześniejszych etapach […]. P.I.2) stosuje przy rozwiązywaniu problemów z różnych dziedzin algorytmy poznane w szkole podstawowej oraz algorytmy: a) na liczbach: […], zamiany reprezentacji liczb między pozycyjnymi systemami liczbowymi […]; b) na tekstach: porównywania tekstów, wyszukiwania wzorca w tekście metodą naiwną, szyfrowania tekstu metodą Cezara. P.II.1) projektuje i programuje rozwiązania problemów z różnych dziedzin […]. II.1) projektuje i tworzy programy w procesie rozwiązywania problemów, wykorzystuje w programach dobrane do algorytmów struktury danych, w tym struktury dynamiczne, i korzysta z dostępnych bibliotek dla tych struktur. II.2) sprawnie posługuje się zintegrowanym środowiskiem programistycznym przy pisaniu, uruchamianiu i testowaniu programów.

Treść zadania

Zadanie 2. Zapis symboliczny

W pliku symbole.txt zapisano 2000 napisów. Każdy z nich jest zapisany w osobnym wierszu i składa się z dokładnie 12 znaków spośród: o, +, *.

Napisz program (lub kilka programów) znajdujący(-ch) odpowiedzi do podanych zadań. Każdą odpowiedź zapisz w pliku wyniki2.txt i poprzedź ją numerem oznaczającym zadanie.

Do Twojej dyspozycji jest plik symbole_przyklad.txt, który zawiera 20 wierszy danych spełniających warunki zadania. Odpowiedzi dla pliku symbole_przyklad.txt są podane pod każdym zadaniem.

Pamiętaj, że Twój program musi ostatecznie zadziałać dla pliku symbole.txt zawierającym 2000 napisów.

Zadanie 2.1. (0–2)

Podaj wszystkie takie napisy z pliku symbole.txt, które są palindromami (czytane od przodu i od tyłu są takie same). Wypisz je po jednym w wierszu, w kolejności takiej jak w pliku symbole.txt.

Odpowiedź dla pliku symbole_przyklad.txt to:

oooo+**+oooo

(w tym pliku jest jeden palindrom)

Zadanie 2.2. (0–4)

W pliku symbole.txt szukamy „kwadratów” złożonych z dziewięciu sąsiadujących identycznych symboli:

+ + +        o o o        * * *
+ + +  lub   o o o  lub   * * *
+ + +        o o o        * * *

Podaj, ile takich kwadratów występuje w pliku symbole.txt. Jeżeli w pliku występuje jeden taki kwadrat, podaj numer wiersza i numer pozycji w wierszu (licząc od 1) jego środkowego pola. Jeżeli jest więcej takich kwadratów, podaj numer wiersza i numer pozycji w wierszu dla środkowego pola każdego z nich.

Przykład. Poniżej podano 6 wierszy przykładowych danych (po 12 znaków w każdym wierszu):

1. + * * + o * o + + * o +
2. + + + o o o o * o * * *
3. + o * o o o o * * + + +
4. * + * o o o o o o + + +
5. o * * o + + + o + + + +
6. o o o o + + * * + * + o

Mamy tutaj trzy kwadraty złożone z 9 identycznych symboli: pierwszy ze środkiem w wierszu 3 na pozycji 5, drugi – w wierszu 3 na pozycji 6, a trzeci – w wierszu 4 na pozycji 11.

Odpowiedź dla pliku symbole_przyklad.txt to:

1 6 3

(jeden kwadrat, który ma środkowe pole w wierszu 6, na pozycji 3).

Informacja do zadań 2.3 i 2.4

Każdy z napisów podanych w pliku symbole.txt będziemy traktować jako liczbę zapisaną w systemie trójkowym, w którym: znak o odpowiada cyfrze 0, znak + odpowiada cyfrze 1, znak * odpowiada cyfrze 2.

Zadanie 2.3. (0–2)

Podaj największą liczbę spośród liczb zapisanych w pliku symbole.txt. W odpowiedzi podaj tę liczbę w zapisie dziesiętnym oraz napis jej odpowiadający.

Odpowiedź dla pliku symbole_przyklad.txt to:

519789  ***+o*ooo++o

Zadanie 2.4. (0–3)

Oblicz sumę wszystkich liczb z pliku symbole.txt. Podaj jej wartość w zapisie dziesiętnym oraz w zapisie trójkowym z użyciem symboli: o, +, *.

Odpowiedź dla pliku symbole_przyklad.txt to:

4841542  +oooo****+oo+o+

Do oceny oddajesz:

  • plik tekstowy wyniki2.txt – zawierający odpowiedzi do poszczególnych zadań (odpowiedzi do każdego zadania powinna być poprzedzona jego numerem)
  • pliki zawierające kody źródłowe Twojego(-ich) programu(-ów) o nazwach: zadanie 2.1, zadanie 2.2, zadanie 2.3, zadanie 2.4.

Źródło: arkusz CKE MINP-R0-100-2505. Otwórz oryginalny PDF

Rozwiązanie

2.1. Odpowiedź z zasad oceniania CKE (napisy będące palindromami, w kolejności z pliku):

++o+o++o+o++
+*+**++**+*+
*+o++**++o+*
*oo*o**o*oo*
+*++*oo*++*+
+o++oooo++o+

Program — dla każdego wiersza sprawdzamy, czy napis jest równy odwróconemu:

with open("symbole.txt") as f:
    for s in f:
        s = s.strip()
        if s == s[::-1]:
            print(s)

2.2. Odpowiedź: 3 kwadraty o środkach (399, 5), (546, 2), (630, 11) — w pliku wynikowym: 3 399 5 546 2 630 11.

Plik traktujemy jako tablicę T[i][j] (2000 wierszy × 12 pozycji). Kwadrat 3×3 ze środkiem w (i, j) wymaga, by wszystkie 9 znaków T[i-1..i+1][j-1..j+1] było identyczne:

T = [l.strip() for l in open("symbole.txt")]
pozycje = []
for i in range(1, len(T) - 1):
    for j in range(1, 11):
        c = T[i][j]
        if all(T[i + di][j + dj] == c for di in (-1, 0, 1) for dj in (-1, 0, 1)):
            pozycje.append((i + 1, j + 1))  # numeracja od 1
print(len(pozycje), *[x for p in pozycje for x in p])

2.3. Odpowiedź: 531246, napis *******o+*+o.

2.4. Odpowiedź: 527865439, w zapisie symbolicznym ++oo*+oo*++ooo*o*++.

Wspólne funkcje do 2.3 i 2.4 (znak najbardziej z lewej to najstarsza cyfra trójkowa):

def wartosc(s):
    v = 0
    for c in s:
        v = v * 3 + {"o": 0, "+": 1, "*": 2}[c]
    return v

def zapis(n):
    if n == 0:
        return "o"
    w = ""
    while n > 0:
        w = "o+*"[n % 3] + w
        n //= 3
    return w

napisy = [l.strip() for l in open("symbole.txt")]
najw = max(napisy, key=wartosc)
print(wartosc(najw), najw)           # 2.3
suma = sum(wartosc(s) for s in napisy)
print(suma, zapis(suma))             # 2.4

Dla pliku przykładowego program daje 519789 ***+o*ooo++o oraz 4841542 +oooo****+oo+o+.

Typowy błąd / pułapka

W 2.2 numeracja wierszy i pozycji jest od 1, a środek kwadratu nie może leżeć w pierwszym ani ostatnim wierszu ani na skrajnej pozycji (wyjście poza tablicę). W 2.3 i 2.4 znak najbardziej z lewej to najstarsza cyfra trójkowa, nie najmłodsza. W 2.1 bez usunięcia znaku końca wiersza (strip()) żaden napis nie wyjdzie palindromem. W 2.4 suma ma więcej niż 12 cyfr trójkowych, więc zapis wyniku trzeba wygenerować w całości, bez obcinania do 12 znaków.

Strona arkusza CKE z treścią zadania

Zadanie 2 - informatyka 2025 PR
Strona arkusza CKE 2025 PR informatyka - zadanie 2 (Zapis symboliczny - plik symbole.txt). Na podstawie: CKE 2025 Oryginalny PDF CKE, str. 8

Rozwiązanie krok po kroku

2.1 – palindromy

Czytamy plik wiersz po wierszu, każdy napis porównujemy z jego odwrotnością (s[::-1] w Pythonie). Te równe wypisujemy w kolejności pojawienia się w pliku.

2.2 – kwadraty 3×3

Konstruujemy tablicę 2D ze znakami z pliku. Iterujemy po wszystkich potencjalnych środkach (i ∈ 2..1999, j ∈ 2..11) i sprawdzamy, czy wszystkie 9 sąsiadujących znaków jest identycznych. Zliczamy i zapamiętujemy pary (wiersz, kolumna).

2.3 – suma w systemie trójkowym

Każdy 12-znakowy napis zamieniamy na liczbę trójkową (o=0, +=1, *=2), wartość najbardziej z lewej ma wagę 3^11. Sumujemy wartości wszystkich 2000 napisów. Wynik wypisujemy dziesiętnie i jako reprezentację symboliczną w systemie trójkowym.

2.4 – ekstrema lub liczby spełniające warunek

W zależności od dokładnej treści (na pełnym arkuszu) – analogiczna konwersja + agregacja: min/max/sortowanie/filtrowanie.

Rozumiesz, jak to rozwiązać?

Przećwicz podobne typy zadań w aplikacji

matury-online.pl ma tysiące zadań pogrupowanych po dziedzinach. Sprawdź, czy temat „zapis symboliczny, palindromy, kwadraty z symboli, kodowanie pozycyjne, przetwarzanie plików tekstowych” zrobisz samodzielnie.

Otwórz matury-online.pl