Sie sind der Besitzer eines Restaurants. Sie eröffnen ein neues Gebiet in Cartesia, wo es nur eine Hauptstraße gibt, die als y-Achse bezeichnet wird. Sie möchten Ihr Restaurant so platzieren, dass Sie die Gesamtentfernung von Ihrem Restaurant und jedem der Häuser in diesem Bereich minimieren.
Eingabe :
Die Eingabe wird sein
n, the number of houses
house1
house2
house3
...
houseN
wo jedes Haus eine Koordinate in der Form ist x y
. Jede Einheit entspricht einem Kilometer.
Sie können Eingaben als Zeichenfolge verwenden oder eine Funktion bereitstellen, die die Eingabe in einem beliebigen Format als Argument verwendet.
Ausgabe : Die y-Koordinate Ihres Restaurants (denken Sie daran, dass sie sich auf der y-Achse befindet). Eigentlich wird es am Straßenrand liegen, aber der Unterschied ist vernachlässigbar.
Wenn n-tes Haus die Entfernungsfunktion ist h_n
und D
ist, möchten Sie im Wesentlichen eine k
solche finden , D(h_0, (0, k)) + D(h_1, (0, k)) + D(h_2, (0, k)) + ... + D(h_n, (0, k))
die minimiert ist.
Beachten Sie, dass die Entfernung so berechnet wird, als ob der Kunde in einer genau geraden Linie von seinem Haus zum Restaurant fährt. Das ist die Entfernung von (x, y)
zu Ihrem Restaurant sqrt(x^2 + (y - k)^2)
.
Die Ausgabe sollte auf mindestens 2 Dezimalstellen genau sein.
Die Ausgabe kann als Zeichenfolge gedruckt oder von der Funktion zurückgegeben werden.
Beispiel Ein- / Ausgabe:
Input:
2
5.7 3.2
8.9 8.1
Output:
5.113013698630137
Die Gesamtentfernung in diesem Beispiel beträgt ungefähr 15.4003
Kilometer.
Dies ist Code Golf - der kürzeste Code gewinnt.
PS Ich interessiere mich auch für eine mathematische Lösung, die nicht nur brachial ist. Es wird nicht den Code Golf gewinnen, aber es wird einige positive Stimmen bekommen. Hier ist, wie ich das Beispielproblem gemacht habe:
Sei Punkt A bei A (5.7, 3.2) und B bei B (8.9, 8.1). Der Lösungspunkt bei (0, k) sei C. Reflektiere A über die y-Achse, um A 'bei (-5.7, 3.2) zu erhalten. Der Abstand von A 'zu C ist gleich dem Abstand von A zu C. Daher kann das Problem auf den Punkt C reduziert werden, so dass A'C + CB minimiert wird. Offensichtlich wäre dies der Punkt C, der auf der Linie A'B liegt.
Ich weiß nicht, ob dies gut auf 3 oder mehr Punkte verallgemeinern würde.
sqrt(diffX^2 + diffY^2)
? Dann Euklidisch. Ich weiß, dass es nicht perfekt zum Szenario passt, gehe aber davon aus, dass der Kunde in einer geraden Linie von seinem / ihrem Haus aus reist.
D
? Euklidisch?