Sei il proprietario di un ristorante. Stai aprendo una nuova area in Cartesia dove c'è solo una strada principale, nota come asse y. Vuoi posizionare il tuo ristorante in modo tale da ridurre al minimo la distanza totale dal tuo ristorante e da ciascuna delle case in quella zona.
Input :
L'input sarà
n, the number of houses
house1
house2
house3
...
houseN
dove ogni casa è una coordinata nel modulo x y
. Ogni unità rappresenta un chilometro.
Puoi prendere l'input come una stringa o fornire una funzione che accetta l'input, in qualunque formato tu scelga, come argomenti.
Output : la coordinata y del tuo ristorante (ricorda, sarà posizionata sull'asse y). In realtà, sarà situato sul lato della strada, ma la differenza è trascurabile.
In sostanza, se l'ennesima casa è h_n
ed D
è la funzione della distanza, allora vuoi trovare k
tale che D(h_0, (0, k)) + D(h_1, (0, k)) + D(h_2, (0, k)) + ... + D(h_n, (0, k))
sia minimizzata.
Si noti che la distanza viene calcolata come se il cliente viaggiasse esattamente in linea retta da casa al ristorante. Questa è la distanza dal (x, y)
tuo ristorante sqrt(x^2 + (y - k)^2)
.
L'output deve essere accurato con almeno 2 cifre decimali.
L'output può essere stampato come una stringa o può essere restituito dalla funzione.
Esempio di input / output:
Input:
2
5.7 3.2
8.9 8.1
Output:
5.113013698630137
La distanza totale in questo esempio è di circa 15.4003
chilometri.
Questo è il codice golf - vince il codice più corto.
PS Sono anche interessato a una soluzione matematica che non è solo forza bruta. Non vincerà il codice golf ma otterrà alcuni voti. Ecco come ho fatto il problema di esempio:
Sia il punto A posizionato in A (5.7, 3.2) e B in B (8.9, 8.1). Lascia che la soluzione punti a (0, k) sia C. Rifletti A sull'asse y per fare A 'a (-5.7, 3.2). La distanza da A 'a C è uguale alla distanza da A a C. Pertanto, il problema può essere ridotto al punto C in modo tale che A'C + CB sia ridotto al minimo. Ovviamente, questo sarebbe il punto C che si trova sulla linea A'B.
Non so se questo generalizzerebbe bene a 3 o più punti.
sqrt(diffX^2 + diffY^2)
? Quindi euclideo. So che non si adatta perfettamente allo scenario, ma presumo che il cliente viaggi in linea retta in qualche modo da casa sua.
D
? Euclideo?