Você é o dono de um restaurante. Você está abrindo em uma nova área em Cartesia, onde há apenas uma estrada principal, conhecida como eixo y. Você deseja colocar seu restaurante de modo a minimizar a distância total do restaurante e de cada uma das casas nessa área.
Entrada :
A entrada será
n, the number of houses
house1
house2
house3
...
houseN
onde cada casa é uma coordenada no formulário x y
. Cada unidade representa um quilômetro.
Você pode receber a entrada como uma string ou fornecer uma função que aceita a entrada, em qualquer formato que você escolher, como seus argumentos.
Saída : a coordenada y do seu restaurante (lembre-se, ele estará localizado no eixo y). Na verdade, ele estará localizado ao lado da estrada, mas a diferença é insignificante.
Essencialmente, se a enésima casa é h_n
e D
é a função de distância, você deseja encontrar k
uma que D(h_0, (0, k)) + D(h_1, (0, k)) + D(h_2, (0, k)) + ... + D(h_n, (0, k))
seja minimizada.
Observe que a distância é calculada como se o cliente viajasse em uma linha exatamente reta da casa até o restaurante. Essa é a distância do (x, y)
seu restaurante sqrt(x^2 + (y - k)^2)
.
A saída deve ser precisa com pelo menos 2 casas decimais.
A saída pode ser impressa como uma sequência ou pode ser retornada da função.
Exemplo de entrada / saída:
Input:
2
5.7 3.2
8.9 8.1
Output:
5.113013698630137
A distância total neste exemplo é de cerca de 15.4003
quilômetros.
Este é o código golf - o código mais curto vence.
PS: Também estou interessado em uma solução matemática que não é apenas força bruta. Não ganhará o código de golfe, mas receberá alguns votos positivos. Aqui está como eu fiz o problema de exemplo:
Seja o ponto A localizado em A (5,7, 3,2) e B em B (8,9, 8,1). Deixe o ponto de solução em (0, k) ser C. Reflita A sobre o eixo y para fazer A 'em (-5,7, 3,2). A distância de A 'a C é igual à distância de A a C. Portanto, o problema pode ser reduzido ao ponto C de modo que A'C + CB seja minimizado. Obviamente, este seria o ponto C que está na linha A'B.
Não sei se isso generalizaria bem para 3 ou mais pontos.
sqrt(diffX^2 + diffY^2)
? Depois euclidiano. Eu sei que ele não se encaixa perfeitamente no cenário, mas assuma que o cliente viaja de alguma forma em linha reta a partir de sua casa.
D
? Euclidiano?