# 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.:

```python
"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

```python

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`

%[https://replit.com/@Onix95/42-maj-2021] 

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