Matura informatyka 2021 maj (poziom rozszerzony) - zadanie 4.3

Treść zadania:
Oblicz, która litera jest najczęściej dopisywana (najczęściej występuje w instrukcji DOPISZ). Podaj tę literę oraz ile razy jest dopisywana. Istnieje tylko jedna taka litera.
Dla pliku przyklad.txt odpowiedzią jest litera U, dopisywana 3 razy.
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 argument, np.:
"DOPISZ E".split(" ")[1]
# taki kod zwróci nam samo "E"
Dodatkowo, przy pomocy if operation.startswith("DOPISZ") odfiltrowuję wszystkie linijki, które nie zaczynają się na DOPISZ.
Jedyne, co pozostało do zrobienia to zliczenie dla każdej liczby ilości jej wystąpień i wypisanie znaku z największą ich liczbą:
from collections import Counter
with open("dane/instrukcje.txt", "r") as f:
operations = [operation.strip().split(" ")[1] for operation in f.readlines() if operation.startswith("DOPISZ")]
print(Counter(operations).most_common(1))
Counter jest bardzo przydatnym narzędziem umożliwiającym skorzystanie z wbudowanej w bibliotekę standardową abstrakcji. Jego odpowiednik zapisany w postaci pętli w tym przypadku to:
with open("dane/instrukcje.txt", "r") as f:
operations = [operation.strip().split(" ")[1] for operation in f.readlines() if operation.startswith("DOPISZ")]
counter = {}
for operation in operations:
counter[operation] = counter.get(operation, 0) + 1
sorted_pairs = sorted(counter.items(), key=lambda pair: pair[1], reverse=True)
print(sorted_pairs[0])
Wynik:
[('Z', 37)]
Źródło: https://arkusze.pl/matura-informatyka-2021-maj-poziom-rozszerzony/



