Вы владелец ресторана. Вы открываете в новой области в Cartesia, где есть только одна главная дорога, известная как ось Y. Вы хотите разместить свой ресторан таким образом, чтобы минимизировать общее расстояние от вашего ресторана и каждого из домов в этом районе.
Вход :
Вход будет
n, the number of houses
house1
house2
house3
...
houseN
где каждый дом является координатой в форме x y
. Каждая единица представляет один километр.
Вы можете принять входные данные как строку или предоставить функцию, которая принимает входные данные в любом формате в качестве аргументов.
Вывод : Y-координата вашего ресторана (помните, он будет расположен на оси Y). На самом деле, он будет расположен на обочине дороги, но разница незначительна.
По сути, если n-й дом есть h_n
и D
есть функция расстояния, то вы хотите найти k
такую, которая D(h_0, (0, k)) + D(h_1, (0, k)) + D(h_2, (0, k)) + ... + D(h_n, (0, k))
сведена к минимуму.
Обратите внимание, что расстояние рассчитывается так, как если бы клиент путешествовал по прямой линии от дома до ресторана. Это расстояние от (x, y)
вашего ресторана sqrt(x^2 + (y - k)^2)
.
Вывод должен быть точным, по крайней мере, до 2 десятичных знаков.
Вывод может быть напечатан в виде строки или может быть возвращен из функции.
Пример ввода / вывода:
Input:
2
5.7 3.2
8.9 8.1
Output:
5.113013698630137
Общее расстояние в этом примере составляет около 15.4003
километров.
Это код гольф - самый короткий код выигрывает.
PS Меня также интересует математическое решение, которое не просто грубая сила. Он не выиграет гольф-код, но получит несколько голосов. Вот как я сделал пример задачи:
Пусть точка A находится в точке A (5.7, 3.2), а точка B в точке B (8.9, 8.1). Пусть точка решения в точке (0, k) равна C. Отразите A по оси y, чтобы получить A 'в точке (-5.7, 3.2). Расстояние от A 'до C равно расстоянию от A до C. Следовательно, проблема может быть сведена к точке C, так что A'C + CB минимизируется. Очевидно, это будет точка C, лежащая на прямой A'B.
Я не знаю, будет ли это обобщать до 3 или более баллов.
sqrt(diffX^2 + diffY^2)
? Тогда евклидов. Я знаю, что это не совсем подходит для сценария, но предположим, что клиент как-то едет по прямой из своего дома.
D
? Евклидовой?