Гора визначається як набір лінійних сегментів , чиї перша точка має координати , (0,a)
де це a > 0
, і чия остання точка має координати (b,0)
, де b > 0
. Усі проміжні точки мають y-координату (ординату) строго більше 0. Тобі даються точки гори, відсортовані у порядку зростання за x-координатою (абсциса). Зауважте, що дві точки можуть мати однакову x-координату, створюючи вертикальний відрізок гори. Якщо вам надано дві точки з однаковою координатою x, їх слід з'єднати в тому порядку, в якому вони задані. Крім того, можуть бути горизонтальні відрізки гори. Ці горизонтальні відрізки не освітлені, незалежно від того. Усі координати є невід’ємними цілими числами.
Питання: яка загальна довжина гори, яка була б освітлена, якщо припустити, що сонце - це нескінченна вертикальна площина світла, розташована праворуч від гори? Це число не потрібно округляти, але якщо воно округлене, включайте принаймні чотири знаки після коми. Я включив малюнок: Тут шрифти, виділені жирними лініями, представляють освітлені сегменти. Зауважте, що на вході P з'являється перед Q (PQ - вертикальний відрізок лінії), тому попередня точка підключена до P, а не Q.
Ви можете приймати дані у будь-якому розумному форматі, як список списків, єдиний список, рядок тощо.
Тестовий випадок:
(0,3000)
(500, 3500)
(2500, 1000)
(5000,5000)
(9000,2000)
(9000,3500)
(10200,0)
Output: 6200.0000
Тут є два освітлені сегменти, як показано на цьому зображенні: Перший має довжину 5000/2 = 2500, а другий - довжину 3700.
Це код-гольф , тому найкоротша відповідь у байтах виграє.
(x1, y1)
і(x2,y2)
. Точка, яка "блокує" це,(x3, y3)
припустимо, y2 <y3 <= y1. Тоді довжина відрізка дорівнює((y1 - y3)/(y1 - y2))*sqrt((x1 - x2)^2 + (y1 - y2)^2)
. Це, по суті, відстань формула, помножене на частку сегмента , який фактично використовується.