Нашли ошибку?

Ближайшее кафе

ЛёгкаяНайти ошибку2 ошибкиГлава 10

#k ближайших соседей#расстояниеid: ga-nearest-cafe

Кафе на карте — точки с координатами. Функция nearest(points, query) возвращает индекс ближайшей к query точки по евклидову расстоянию. При равных расстояниях — меньший индекс, для пустого списка — -1. В функции две ошибки — найдите и исправьте их.

Примеры

nearest([[0, 0], [5, 5], [1, 2]], [2, 2])   # 2
nearest([[1, 0], [-1, 0]], [0, 0])          # 0 — ничья, берём меньший индекс

Решение

import math


def nearest(points: list[list[float]], query: list[float]) -> int:
    """Индекс ближайшей точки (меньший при равенстве) или -1."""
    best, best_dist = -1, math.inf
    for i, point in enumerate(points):
        d = math.sqrt(sum(x - y for x, y in zip(point, query)) ** 2)
        if d <= best_dist:
            best, best_dist = i, d
    return best

Можно решать и в своём редакторе: «Скопировать с тестами» и запустите python3 nearest_cafe.py — тесты те же, результат покажет ✓ / ✗ и итог.