ŚredniWaga: 6-12 pkt

Przetwarzanie napisów i plików tekstowych

Klasyk maturalny! Naucz się wczytywać pliki, analizować stringi, pisać algorytmy na palindromy i anagramy oraz sprawnie korzystać ze słowników.

  1. Wczytywanie danych (To musisz umieć z zamkniętymi oczami!)

Praktycznie każde zadanie z programowania na maturze zaczyna się od pliku .txt. Jeśli potkniesz się na tym etapie, tracisz punkty za całe zadanie, bo Twój algorytm nie będzie miał na czym pracować.

💡 Pro-tip: Magia "with open"

W Pythonie zawsze używaj konstrukcji with open(). Dlaczego? Ponieważ automatycznie dba ona o zamknięcie pliku z pamięci, nawet jeśli Twój program nagle wybuchnie i wyrzuci błąd.

Większość arkuszy CKE podaje pliki w formacie "jedno słowo na jedną linię". Najszybszy sposób, by wrzucić je do wygodnej listy i odciąć niewidoczne znaki nowej linii (\n), to użycie prostej kombinacji .read().split().

Klasyczny import z pliku w 2 linijkach:

# Szybkie wczytanie wszystkich słów z pliku do listy
with open("dane.txt", "r") as plik:
  slowa = plik.read().split() 
  
# Zawsze wypisz pierwsze 5 słów na brudno, żeby sprawdzić, czy działa!
print(slowa[:5])

  1. Królowie matury: Palindromy i Anagramy

CKE absolutnie uwielbia algorytmy tekstowe. Na szczęście Python został stworzony do pracy na napisach (Stringach) i posiada potężne mechanizmy wbudowane, które pozwalają zaoszczędzić dziesiątki linijek kodu.

🔄 Palindrom

Słowo czytane od przodu i od tyłu brzmi tak samo (np. KAJAK, POTOP).

Zamiast pisać skomplikowane pętle for i porównywać indeksy z dwóch stron, w Pythonie używamy magii slicingu z krokiem -1, który błyskawicznie odwraca słowo!

if slowo == slowo[::-1]:

🔀 Anagram

Dwa słowa zbudowane dokładnie z tych samych liter, ale w innej kolejności (np. BAR i RAB).

Jak najszybciej to udowodnić? Wystarczy posortować oba słowa alfabetycznie! Jeśli były anagramami, po posortowaniu staną się identyczne.

if sorted(slowo1) == sorted(slowo2):

  1. Zliczanie wystąpień liter – Słowniki w akcji

Często pada polecenie: "Podaj, która litera alfabetu występuje najczęściej we wszystkich słowach w pliku".

Jasne, możesz użyć metody .count() w pętli dla alfabetu, ale o wiele szybszym, bardziej elastycznym i wyżej punktowanym sposobem za elegancję są słowniki (dictionary). Zbierają one klucze (litery) i przypisują im dynamicznie wartości (ilość wystąpień).

Algorytm zliczający (często punktowany za efektywność):

wystapienia = {}

for litera in "INFORMATYKA":
  # get(litera, 0) szuka litery. Jeśli jej nie ma, zwraca bezpieczne 0
  # Następnie zawsze dodajemy 1.
  wystapienia[litera] = wystapienia.get(litera, 0) + 1

print(wystapienia) 
# Wynik: {'I': 1, 'N': 1, 'F': 1, 'O': 1, 'R': 1, 'M': 1, 'A': 2, 'T': 1, 'Y': 1, 'K': 1}

  1. Najdłuższy podciąg spełniający warunek (Hit arkuszy!)

To absolutny klasyk z kategorii "zadanie za 4 punkty". Musisz przeanalizować długi napis i znaleźć w nim najdłuższy fragment, który spełnia pewną regułę (np. składa się z rosnących wartości, z samych samogłosek, albo z tych samych znaków z rzędu).

Zadanie

Treść zadania:

Zbadaj ciąg znaków "AABBBCCCDDDDDDDE" i znajdź długość najdłuższego spójnego podciągu składającego się wyłącznie z takich samych liter występujących jedna po drugiej.

Jak napisać taki algorytm z użyciem jednej pętli?
💡 Pokaż rozwiązanie krok po kroku
  • 1

    Krok 1: Śledzenie dwóch zmiennych

    Sekretem tego algorytmu jest utrzymanie dwóch liczników. Zmienna aktualna_dlugosc śledzi podciąg, który badamy w danej chwili. Zmienna max_dlugosc to nasz "rekord Guinessa", do którego będziemy porównywać wyniki. Zawsze zaczynamy od wartości 1 (bo najkrótszy ciąg to 1 litera).

  • 2

    Krok 2: Pętla i badanie warunku

    Tworzymy pętlę od drugiego znaku do końca słowa. Z każdym krokiem sprawdzamy, czy obecna litera pod indeksem ii jest taka sama jak litera poprzednia pod indeksem i1i-1. Jeśli tak, powiększamy aktualna_dlugosc o 1.

  • 3

    Krok 3: Złamanie reguły i zapis rekordu

    Jeśli litery się różnią (np. po serii 'C' pojawia się 'D'), sprawdzamy czy nasza aktualna_dlugosc pobiła max_dlugosc. Jeśli tak – nadpisujemy rekord. Następnie bezwzględnie resetujemy aktualna_dlugosc z powrotem na 1 dla nowej litery.

  • 4

    Krok 4: Gotowy kod (Pamiętaj o zabezpieczeniu!)

    Co jeśli najdłuższy ciąg znajduje się na samym końcu słowa (tak jak nasze 'D')? Pętla się skończy i rekord nie zostanie zapisany! Dlatego zawsze powtarzamy sprawdzenie rekordu jeszcze raz za pętlą.

    slowo = "AABBBCCCDDDDDDDE"
    max_dl = 1
    aktualna_dl = 1
    
    for i in range(1, len(slowo)):
      if slowo[i] == slowo[i-1]:
          aktualna_dl += 1
      else:
          # Zapisz rekord, jeśli obecny ciąg był najdłuższy
          if aktualna_dl > max_dl:
              max_dl = aktualna_dl
          # Zresetuj licznik dla nowej litery
          aktualna_dl = 1 
    
    # Zabezpieczenie na wypadek ciągu na samym końcu słowa
    if aktualna_dl > max_dl:
      max_dl = aktualna_dl
    
    print(f"Najdłuższy ciąg ma długość: {max_dl}") # Zwróci 7

Nadal czujesz się niepewnie?

To tylko jeden z pewniaków. Na kursie przechodzimy przez nie wszystkie, krok po kroku, aż poczujesz ten spokój.

Pomóżcie mi zdać maturę!