4.4 Pługi w wycinku

Matura pokazowa marzec 2022 - Matura z informatyki: arkusze krok po kroku (Python)

Zadanie 4.4 (3 pkt): pada śnieg, gdy temperatura jest najwyżej 0 i opad większy od zera. Wysokość śniegu sumuje się z kolejnych godzin bez deszczu (deszcz zeruje sumę, godzina bez opadu nic nie zmienia). Gdy suma przekroczy 4 cm, w następnej godzinie wyjeżdżają pługi: odśnieżanie trwa godzinę, opad z tej godziny pługi usuwają od razu, a suma zaczyna się od zera. Program pamięta flagę `plough_next` i pomija opad godziny odśnieżania (`continue`). Suma jest zaokrąglana do jednego miejsca, bo dodawanie ułamków binarnych dałoby np. 4.000000000000001. Policz wyjazdy pługów, dzień z największą liczbą wyjazdów i tę liczbę. Dla wycinka: 21 wyjazdów, najwięcej 22.02.2019 (4).

rows = []  # (dzień, godzina, temperatura, opad)
with open("brenna_przyklad.txt") as f:
    f.readline()  # wiersz nagłówkowy
    for line in f:
        moment, temp, precip = line.strip().split("\t")
        day, hour = moment.split()  # "01.01.2019 00:00"
        rows.append((day, hour, float(temp.replace(",", ".")), float(precip.replace(",", "."))))

# 4.4 śnieg: temperatura <= 0 i opad > 0; deszcz zeruje sumę; suma > 4 cm = pługi w następnej godzinie
trips, per_day = 0, {}
snow, plough_next = 0, False
for day, hour, temp, precip in rows:
    if plough_next:  # godzina odśnieżania: jej opad pługi usuwają w tym samym cyklu
        plough_next = False
        trips = trips + 1
        per_day[day] = per_day.get(day, 0) + 1
        continue
    if temp > 0 and precip > 0:
        snow = 0
    elif temp <= 0 and precip > 0:
        snow = round(snow + precip, 1)
        if snow > 4:
            plough_next = True
            snow = 0
busiest = ""
for day in per_day:
    if busiest == "" or per_day[day] > per_day[busiest]:
        busiest = day

print("4.4", trips, busiest, per_day[busiest])

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu Matura z informatyki: arkusze krok po kroku·Zaloguj się, aby zapisać postęp na koncie.