Представьте себе, что вы путешествуете в точку, лежащую на расстоянии A миль по горизонтали и B миль по вертикали от вашего текущего положения. Или, другими словами, путешествуя от (0, 0)
точки к точке (a, b)
. Как далеко вы должны были бы в конечном итоге путешествовать? Это кажется простым вопросом, но ответ зависит от того, кого вы спрашиваете. Если вы вороной, и вы можете путешествовать по прямой , расстояние , пройденное это просто евклидово расстояние до (a, b)
. Это
sqrt(a^2 + b^2)
Но если вы просто скучный человек, вам не нужно идти так далеко, поэтому вам нужно взять такси. Большинство такси не едут по прямой линии к месту назначения, потому что они обычно пытаются остаться на дорогах. Таким образом, реальное расстояние, которое вы в конечном итоге пройдете, является суммой вертикального расстояния и горизонтального расстояния. Или формула:
abs(a) + abs(b)
Это называется расстояние такси . Эта картина хорошо демонстрирует разницу между ними:
Чтобы добраться до (6, 6)
, ворона может просто лететь по зеленой линии, и это дает расстояние 6 * sqrt(2)
или примерно 8,49. Такси может пройти по красной, синей или желтой дорожке, но все они займут 12.
Это приводит к реальному вопросу, который я задаю. Если ворона и такси уезжают из точки (0, 0)
и едут в точку (a, b)
, то как долго длится путь такси? Или, в более математическом жаргоне,
Учитывая двумерный вектор, определите разность между нормой 2 вектора и нормой 1 вектора.
Вы должны написать максимально короткую программу или функцию, чтобы ответить на этот вопрос. Вы можете выбрать «a» и «b» как два отдельных входа или как кортеж из двух элементов. Вы можете взять ввод и вывод в любом разумном формате. Если разница не является целым числом, вы должны быть с точностью не менее двух десятичных знаков.
Вы всегда можете предположить, что «a» и «b» будут целыми числами, и что они не будут оба равны 0. (Хотя возможно, что любой из них будет нулевым)
Как обычно, применяются стандартные лазейки и стараются сделать вашу программу максимально короткой, посчитанной в байтах.
Я буду приветствовать любой ответ, который публикует объяснение того, как работает код, и демонстрирует любые интересные приемы, используемые для сохранения байтов.
Вот несколько примеров для тестирования вашего кода:
#input #output
3, 4 2
-3, 4 2
-3, -4 2
6, 6 3.51
42, 0 0
10, 10 5.86
3, 3 1.76
Удачи в гольф! :)
10,10
должен быть 5,86, так как он получается, 5.85786...
и вы округлили тот, что ниже.