Vous êtes propriétaire d'un restaurant. Vous ouvrez dans une nouvelle zone de Cartesia où il n'y a qu'une seule route principale, connue sous le nom d'axe y. Vous souhaitez placer votre restaurant de manière à minimiser la distance totale entre votre restaurant et chacune des maisons de cette zone.
Entrée :
L'entrée sera
n, the number of houses
house1
house2
house3
...
houseN
où chaque maison est une coordonnée dans le formulaire x y
. Chaque unité représente un kilomètre.
Vous pouvez prendre l'entrée sous forme de chaîne ou fournir une fonction qui prend l'entrée, dans le format que vous choisissez, comme arguments.
Sortie : la coordonnée y de votre restaurant (rappelez-vous, elle sera située sur l'axe y). En fait, il sera situé sur le côté de la route, mais la différence est négligeable.
Essentiellement, si la nième maison est h_n
et D
est la fonction de distance, alors vous voulez trouver k
celle qui D(h_0, (0, k)) + D(h_1, (0, k)) + D(h_2, (0, k)) + ... + D(h_n, (0, k))
est minimisée.
Notez que la distance est calculée comme si le client se rendait exactement en ligne droite de sa maison au restaurant. C'est la distance de (x, y)
votre restaurant sqrt(x^2 + (y - k)^2)
.
La sortie doit être précise à au moins 2 décimales.
La sortie peut être imprimée sous forme de chaîne ou renvoyée par la fonction.
Exemple d'entrée / sortie:
Input:
2
5.7 3.2
8.9 8.1
Output:
5.113013698630137
La distance totale dans cet exemple est d'environ 15.4003
kilomètres.
C'est le golf de code - le code le plus court gagne.
PS Je m'intéresse aussi à une solution mathématique qui n'est pas seulement la force brute. Il ne gagnera pas le golf de code mais il obtiendra quelques votes positifs. Voici comment j'ai fait l'exemple du problème:
Soit le point A situé en A (5.7, 3.2) et B en B (8.9, 8.1). Soit le point de solution en (0, k) égal à C. Réfléchissez A sur l'axe des y pour faire A 'en (-5,7, 3,2). La distance de A 'à C est égale à la distance de A à C. Par conséquent, le problème peut être réduit au point C de telle sorte que A'C + CB soit minimisé. Évidemment, ce serait le point C qui se trouve sur la ligne A'B.
Je ne sais pas si cela généraliserait bien à 3 points ou plus.
sqrt(diffX^2 + diffY^2)
t -il ? Puis euclidienne. Je sais que cela ne correspond pas parfaitement au scénario, mais supposons que le client se déplace en ligne droite de sa maison.
D
? Euclidienne?