Наибольшая просадка числа заявок

тема: Временные ряды и окна · уровень: продвинутый

Условие

В файле data.csv приведена дневная статистика заявок в службу поддержки интернет-провайдера. Для каждого района и дня указано число открытых заявок.

Требуется рассмотреть записи заданного района в указанном диапазоне дат включительно, упорядоченные по дате. Строки с пустым значением числа заявок не учитываются. Пусть x_i — число заявок в очередной учитываемой записи, а M_i = max(x_1, x_2, ..., x_i) — кумулятивный максимум к этому моменту.

Просадкой в записи i называется величина d_i = 100 * (M_i - x_i) / M_i. Требуется найти наибольшую просадку D = max(d_i) в процентах. Если в диапазоне остаётся только одна запись с числом заявок, просадка равна 0.00.

При равенстве нескольких кумулятивных максимумов используется одно и то же значение максимума, поэтому выбор конкретной строки при равенстве не влияет на ответ.

Формат ввода

В первой строке дано название района area. Во второй строке дана начальная дата диапазона date_from в формате YYYY-MM-DD. В третьей строке дана конечная дата диапазона date_to в формате YYYY-MM-DD.

Рядом с программой находится файл data.csv в кодировке UTF-8. Разделитель полей — запятая, первая строка содержит заголовок:

date,area,opened_tickets

Поле date содержит дату в формате YYYY-MM-DD. Поле area содержит название района. Поле opened_tickets содержит целое неотрицательное число заявок либо пустую строку, если статистика за этот день не поступила.

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

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

Ограничения

В файле содержится от 300 до 4000 строк данных, не считая заголовка.

area имеет длину от 3 до 20 символов и совпадает с названием района из файла.

Даты запроса принадлежат промежутку от 2025-01-01 до 2025-12-10, причём date_from <= date_to.

Длина названия района в файле составляет от 3 до 20 символов.

Значение opened_tickets, если оно не пропущено, является целым числом от 0 до 10000.

В заданном диапазоне для указанного района гарантируется хотя бы одна строка с непустым значением opened_tickets.

Округление выполняется выводом ровно двух знаков после точки.

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

Куда дальше