Уявіть, що подорожуєте до точки, що лежить на відстані миль від горизонталі та на відстані 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...
і ви округлили ту, що знаходиться під нею.