Выручка парковки по действующим тарифам

тема: Связывание таблиц · уровень: продвинутый

Условие

В торговом центре работают парковочные зоны с разными тарифами. Файл data.csv содержит сведения о зонах и о временных интервалах, в которые действует тариф. Файл visits.csv содержит записи о въездах автомобилей.

Для каждого въезда в указанную дату необходимо найти строку из data.csv с тем же parking_id. Тариф применяется только тогда, когда время въезда принадлежит полуинтервалу [active_from, active_to): время active_from включается, а время active_to не включается. Записи с пустым значением duration_minutes не учитываются.

Стоимость одного учитываемого въезда равна ceil(duration_minutes / 60) * rate_cents, где ceil означает округление вверх до целого числа часов, а rate_cents измеряется в центах. Требуется найти сумму стоимостей всех учитываемых въездов за запрошенную дату и вывести её в денежных единицах.

Если время въезда совпадает с началом интервала active_from, тариф считается действующим. Если время въезда совпадает с концом интервала active_to, тариф не считается действующим. Если за дату нет учитываемых въездов, следует вывести 0.00.

Формат ввода

Рядом с программой находятся два файла в кодировке UTF-8 с разделителем-запятой.

Файл data.csv содержит от 300 до 4000 строк данных после заголовка: parking_id,zone_name,active_from,active_to,rate_cents.

parking_id — целочисленный идентификатор парковочной зоны. zone_name — её название без запятых. Поля active_from и active_to имеют вид HH:MM. Поле rate_cents — целая стоимость одного начатого часа в центах.

Файл visits.csv содержит от 300 до 4000 строк данных после заголовка: visit_id,parking_id,entry_datetime,duration_minutes.

visit_id — целочисленный идентификатор въезда. Значение parking_id присутствует в первом столбце файла data.csv. Поле entry_datetime имеет вид YYYY-MM-DD HH:MM. Поле duration_minutes содержит целую длительность в минутах либо пустую строку, если длительность не зафиксирована.

В стандартный ввод подаётся одна строка с датой query_date в виде YYYY-MM-DD.

Формат вывода

Выведите суммарную стоимость учитываемых въездов за дату query_date в денежных единицах ровно с двумя знаками после точки.

Ограничения

Количество строк в каждом из файлов: от 300 до 4000.

1 <= parking_id <= 4000, 1 <= visit_id <= 1000000.

Длина zone_name: от 3 до 30 символов.

Время в полях active_from, active_to и во времени въезда корректно: часы от 00 до 23, минуты от 00 до 59. Для каждой зоны выполняется active_from < active_to.

Дата в entry_datetime и query_date находится в диапазоне от 2025-01-01 до 2025-12-31.

1 <= rate_cents <= 5000.

Непустое значение duration_minutes удовлетворяет условию 1 <= duration_minutes <= 1440. Пустая длительность означает пропуск и не учитывается.

Решить задачу с автопроверкой на Python →

Куда дальше