Une montagne est définie comme étant un ensemble de segments de droite dont le premier point a les coordonnées (0,a)
où a > 0
, et dont le dernier point a les coordonnées (b,0)
, où b > 0
. Tous les points intermédiaires ont une coordonnée y (ordonnée) strictement supérieure à 0. Les points de la montagne sont classés dans l'ordre croissant des abscisses (abscisses). Notez que deux points peuvent avoir la même coordonnée x, produisant un segment vertical de la montagne. Si on vous donne deux points avec la même coordonnée x, ils doivent être connectés dans l'ordre dans lequel ils vous sont donnés. De plus, il peut y avoir des segments horizontaux de la montagne. Ces segments horizontaux ne sont pas éclairés, quoi qu'il en soit. Toutes les coordonnées sont des entiers non négatifs.
La question: quelle est la longueur totale de la montagne qui serait éclairée, en supposant que le soleil soit un plan de lumière vertical infini situé à droite de la montagne? Ce nombre n'a pas besoin d'être arrondi, mais s'il l'est, incluez au moins quatre décimales. J'ai inclus une image: Ici, les lignes en gras représentent les segments allumés. Notez que dans l'entrée, P apparaît avant Q (PQ est un segment de droite), donc le point précédent est connecté à P et non à Q.
Vous pouvez prendre des entrées dans n’importe quel format raisonnable, comme une liste de listes, une liste unique, une chaîne, etc.
Cas de test:
(0,3000)
(500, 3500)
(2500, 1000)
(5000,5000)
(9000,2000)
(9000,3500)
(10200,0)
Output: 6200.0000
Il y a ici deux segments illuminés, comme le montre cette image: le premier a une longueur de 5000/2 = 2500 et le second une longueur de 3700.
C'est du code-golf , donc la réponse la plus courte en octets est gagnante.
(x1, y1)
et et(x2,y2)
. Le point qui le "bloque" est(x3, y3)
. Supposons que y2 <y3 <= y1. La longueur du segment est alors((y1 - y3)/(y1 - y2))*sqrt((x1 - x2)^2 + (y1 - y2)^2)
: c’est essentiellement le formule de distance, multipliée par la fraction du segment réellement utilisé.