Una montagna è definita come un insieme di segmenti di linea il cui primo punto ha coordinate (0,a)
dove a > 0
, e il cui ultimo punto ha coordinate (b,0)
, dove b > 0
. Tutti i punti intermedi hanno una coordinata y (ordinata) strettamente maggiore di 0. Vengono assegnati i punti sulla montagna ordinati in ordine crescente di coordinata x (ascissa). Nota che due punti possono avere la stessa coordinata x, producendo un segmento verticale della montagna. Se ti vengono dati due punti con la stessa coordinata x, devono essere collegati nell'ordine in cui sono stati assegnati. Inoltre, ci possono essere segmenti orizzontali della montagna. Questi segmenti orizzontali non sono illuminati, qualunque cosa accada. Tutte le coordinate sono numeri interi non negativi.
La domanda: qual è la lunghezza totale della montagna che verrebbe illuminata, supponendo che il sole sia un piano di luce verticale infinito situato alla destra della montagna? Non è necessario arrotondare questo numero, ma se è arrotondato, includere almeno quattro cifre decimali. Ho incluso un'immagine: qui le linee in grassetto rappresentano i segmenti illuminati. Si noti che nell'input, P appare prima di Q (PQ è un segmento di linea verticale), quindi il punto precedente è collegato a P e non a Q.
Puoi accettare input in qualsiasi formato ragionevole, come un elenco di elenchi, un singolo elenco, una stringa, ecc.
Caso di prova:
(0,3000)
(500, 3500)
(2500, 1000)
(5000,5000)
(9000,2000)
(9000,3500)
(10200,0)
Output: 6200.0000
Ci sono due segmenti illuminati qui, come mostrato in questa immagine: il primo ha lunghezza 5000/2 = 2500 e il secondo ha lunghezza 3700.
Questo è code-golf , quindi vince la risposta più breve in byte.
(x1, y1)
e(x2,y2)
. Il punto che sta "bloccando" è(x3, y3)
. Supponi y2 <y3 <= y1. Quindi la lunghezza del segmento è((y1 - y3)/(y1 - y2))*sqrt((x1 - x2)^2 + (y1 - y2)^2)
. Questa è essenzialmente la formula della distanza, moltiplicata per la frazione del segmento effettivamente utilizzata