Skip to main content

Command Palette

Search for a command to run...

Matura informatyka 2021 maj (poziom rozszerzony) - zadanie 4.2

Updated
2 min read
Matura informatyka 2021 maj (poziom rozszerzony) - zadanie 4.2

Treść zadania:

Znajdź najdłuższy ciąg występujących kolejno po sobie instrukcji tego samego rodzaju. Jako odpowiedź podaj rodzaj instrukcji oraz długość tego ciągu. Istnieje tylko jeden taki ciąg.

Dla pliku przyklad.txt odpowiedzią jest: rodzaj instrukcji – DOPISZ, długość ciągu – 5.

Rozwiązanie (i cały program):

W list comprehension poza standardowym .strip() odpowiedzialnym w tym przypadku za usunięcie znaku nowej linii rozdzielam również operację od jej argumentu i zostawiam samą nazwę operacji, np.:

"DOPISZ E".split(" ")[0]
# taki kod zwróci nam samo "DOPISZ"

Następnie inicjalizuję liczniki - dla największej ilości operacji i dla aktualnej ilości operacji - wraz ze zmiennymi przechowującymi nazwy aktualnej operacji i operacji najczęściej do tej pory spotkanej.
Jeżeli w aktualnej iteracji instrukcja (czyli np.: DOPISZ) równa się wcześniej zapisanej current_instruction_name , to inkrementujemy aktualny licznik. W przeciwnym wypadku natrafiliśmy na koniec lokalnego ciągu tej samej operacji. Zatem trzeba sprawdzić, czy licznik lokalnego ciągu jest większy od najdłuższego spotkanego do tej pory. Jeśli tak - mamy nowy najdłuższy ciąg - zastępujemy zatem zmienne.
Dlaczego current_operations_count jest ustawiony na 1 zamiast na 0 ?
W przeciwnym wypadku zostałaby ominięta wtedy jedna operacja, która przerwała wcześniejszy ciąg :D


with open("dane/instrukcje.txt", "r") as f:
    operations = [operation.strip().split(" ")[0]
                  for operation in f.readlines()]

total_operations_count = 0
total_instruction_name = None

current_operations_count = 0
current_instruction_name = None

for instruction in operations:
    if instruction == current_instruction_name:
        current_operations_count += 1
    else:
        if current_operations_count > total_operations_count:
            total_instruction_name = current_instruction_name
            total_operations_count = current_operations_count
        current_operations_count = 1
        current_instruction_name = instruction


print(f"{total_instruction_name}: {total_operations_count}")

Wynik:

ZMIEN: 7

Źródło: https://arkusze.pl/matura-informatyka-2021-maj-poziom-rozszerzony/