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/



