Uma montanha é definida como um conjunto de segmentos de linha cujo primeiro ponto possui coordenadas (0,a)
onde a > 0
e cujo último ponto possui coordenadas (b,0)
onde b > 0
. Todos os pontos intermediários têm uma coordenada y (ordenada) estritamente maior que 0. Você recebe os pontos na montanha classificados em ordem crescente da coordenada x (abcissa). Observe que dois pontos podem ter a mesma coordenada x, produzindo um segmento vertical da montanha. Se você receber dois pontos com a mesma coordenada x, eles deverão ser conectados na ordem em que são dados. Além disso, pode haver segmentos horizontais da montanha. Esses segmentos horizontais não estão acesos, não importa o quê. Todas as coordenadas são números inteiros não negativos.
A pergunta: qual é o comprimento total da montanha que seria iluminada, supondo que o sol seja um plano vertical infinito de luz localizado à direita da montanha? Esse número não precisa ser arredondado, mas se for arredondado, inclua pelo menos quatro casas decimais. Incluí uma figura: Aqui, as linhas em negrito representam os segmentos acesos. Observe que, na entrada, P aparece antes de Q (PQ é um segmento de linha vertical), portanto o ponto anterior é conectado a P e não a Q.
Você pode receber informações em qualquer formato razoável, como uma lista de listas, uma única lista, uma string, etc.
Caso de teste:
(0,3000)
(500, 3500)
(2500, 1000)
(5000,5000)
(9000,2000)
(9000,3500)
(10200,0)
Output: 6200.0000
Existem dois segmentos iluminados aqui, como mostrado nesta imagem: O primeiro tem comprimento 5000/2 = 2500 e o segundo tem comprimento 3700.
Isso é código-golfe , então a resposta mais curta em bytes vence.
(x1, y1)
e, e(x2,y2)
o ponto que está "bloqueando" é(x3, y3)
. Suponha y2 <y3 <= y1. Então o comprimento do segmento é((y1 - y3)/(y1 - y2))*sqrt((x1 - x2)^2 + (y1 - y2)^2)
. fórmula de distância, multiplicada pela fração do segmento que é realmente usado.