Ближайший заказ по двум признакам

тема: Расстояния и kNN · уровень: базовый

Условие

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

Новый заказ задаётся двумя признаками: ожидаемым временем приготовления и длиной маршрута. Требуется найти строку журнала, наиболее близкую к новому заказу по этим двум признакам.

Используется евклидово расстояние. Для заказа с признаками (p, r) и запроса с признаками (P, R) оно равно d = sqrt((p - P)^2 + (r - R)^2).

Строки, в которых отсутствует хотя бы одно из двух числовых значений, не участвуют в поиске. Гарантируется, что после исключения таких строк останется хотя бы один заказ. Если минимальное расстояние достигается у нескольких заказов, выбирается заказ, расположенный раньше в файле data.csv.

Формат ввода

В первой и единственной строке стандартного ввода записаны два вещественных числа P R через пробел: ожидаемое время приготовления нового заказа в минутах и длина его маршрута в километрах.

Рядом с программой расположен файл data.csv в кодировке UTF-8. Разделитель в файле — запятая, первая строка содержит заголовки. Файл содержит столбцы order_id, prep_minutes, route_km. Столбец order_id содержит идентификатор заказа, а столбцы prep_minutes и route_km содержат вещественные числа или пустую строку, если значение неизвестно.

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

Выведите идентификатор order_id ближайшего заказа.

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

Ограничения

В файле от 300 до 1000 строк с заказами, не считая заголовка.

Длина идентификатора order_id составляет от 1 до 20 символов и содержит только латинские буквы, цифры и символ подчёркивания.

Если значение указано, то 0 <= prep_minutes <= 120, 0 <= route_km <= 50.

Во входной строке 0 <= P <= 120, 0 <= R <= 50.

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

Куда дальше