Una montaña se define como un conjunto de segmentos de línea cuyo primer punto tiene coordenadas (0,a)
donde a > 0
, y cuyo último punto tiene coordenadas (b,0)
, dónde b > 0
. Todos los puntos intermedios tienen una coordenada y (ordenada) estrictamente mayor que 0. Se le dan los puntos en la montaña ordenados en orden ascendente de la coordenada x (abscisa). Tenga en cuenta que dos puntos pueden tener la misma coordenada x, produciendo un segmento vertical de la montaña. Si se le dan dos puntos con la misma coordenada x, se deben conectar en el orden en que se dan. Además, puede haber segmentos horizontales de la montaña. Estos segmentos horizontales no están iluminados, pase lo que pase. Todas las coordenadas son enteros no negativos.
La pregunta: ¿cuál es la longitud total de la montaña que se iluminaría, suponiendo que el sol sea un plano de luz vertical infinito ubicado a la derecha de la montaña? Este número no necesita ser redondeado, pero si es redondeado, incluya al menos cuatro decimales. He incluido una imagen: aquí, las líneas en negrita representan los segmentos que están encendidos. Tenga en cuenta que en la entrada, P aparece antes que Q (PQ es un segmento de línea vertical), por lo que el punto anterior está conectado a P y no a Q.
Puede tomar la entrada en cualquier formato razonable, como una lista de listas, una sola lista, una cadena, etc.
Caso de prueba:
(0,3000)
(500, 3500)
(2500, 1000)
(5000,5000)
(9000,2000)
(9000,3500)
(10200,0)
Output: 6200.0000
Aquí hay dos segmentos iluminados, como se muestra en esta imagen: el primero tiene una longitud de 5000/2 = 2500 y el segundo tiene una longitud de 3700.
Este es el código de golf , por lo que gana la respuesta más corta en bytes.
(x1, y1)
y(x2,y2)
. El punto que está "bloqueando" es(x3, y3)
. Suponga que y2 <y3 <= y1. Entonces la longitud del segmento es((y1 - y3)/(y1 - y2))*sqrt((x1 - x2)^2 + (y1 - y2)^2)
. fórmula de distancia, multiplicada por la fracción del segmento que se usa realmente.