Isso é um pouco semelhante aos centros de um triângulo , mas com um ponto diferente. O ponto de Fermat é o ponto P no triângulo ABC, de modo que o valor de AP + BP + CP seja minimizado. Existem dois casos:
Se houver um ângulo maior que 120 graus, esse vértice é o ponto de fermat. Caso contrário, desenhe triângulos equilaterais em cada um dos lados do ABC. Conecte o vértice distante de cada triângulo equilátero ao vértice oposto do triângulo ABC. Fazer isso para cada um dos três triângulos equilaterais resulta em um único ponto comum de interseção para todas as três linhas, que é o ponto Fermat.
Ele deve ser executado dentro de 5 segundos em uma máquina razoável.
Entrada : um conjunto de 3 pontos, não necessariamente números inteiros. Isso pode ser tomado como uma matriz aninhada, sequência de caracteres, lista de tuplas etc. (o que for mais adequado ao seu idioma).
Saída : As coordenadas do ponto Fermat, novamente, no entanto, seu idioma lida melhor com os pontos. Imprecisões em pontos flutuantes não serão contadas contra você.
Casos de teste :
[[1, 1], [2, 2], [1, 2]] --> [1.2113248654051871, 1.788675134594813]
[[-1, -1], [-2, -1], [0, 0]] --> [-1, -1]
[[-1, -1], [1, -1], [0, 1]] --> [0, -0.42264973081037427]
[[0, 0], [0.5, 0.8660254037844386], [-5, 0]] --> [0, 0]
[[0, 0], [0, -5], [-0.8660254037844386, 0.5]] --> [0, 0]
Este é o código de golfe, então o código mais curto vence!
-0.0
é produzido no lugar de alguns0.0
s?Respostas:
Haskell,
346291285 bytesO mesmo código com algumas explicações
Testes:
Resultado:
fonte
£
e¤
como operadores de 2 bytes, mas não quando codificado como ISO-8859-1 com£
e¤
como operadores de 1 byte. Os operadores de um byte disponíveis em UTF-8 são!
,#
,%
,&
,?
. Você deve substituir os operadores de 2 bytes ou ajustar sua contagem de bytes.Pitão,
475448440 bytesQualquer ajuda para o golfe ainda é apreciada.
Ungolfed:
Entrada:
Resultado:
fonte
from math import*
é um golfe bastante comum. Isso também permitirá que você o use empi
vez de codificá-lo (o mesmo tamanho para2*pi/3
). Você também pode soltar um monte de espaço em branco como:d=lambda x,y:(...
.Python 3.5,
10191016998982969953 bytes:Incrivelmente longo comparado com outras respostas, mas ei, pelo menos funciona! Eu não poderia estar mais feliz com o resultado que obtive, pois esse deve ser um dos desafios mais difíceis que já fiz. Estou tão feliz que isso realmente funciona! : D Agora, para as notas mais técnicas:
H((1,1),(2,2),(1,2))
funcionará, mas também o seráH([1,1],[2,2],[1,2])
.-0.0
no lugar de0.0
algumas entradas. Por exemplo, a saída para a entrada[-1, -1], [1, -1], [0, 1]
é[-0.0, -0.4226497308103744]
.Espero que esteja tudo bem, embora, se não estiver, eu o alterarei, embora isso me custe mais alguns bytes.Tudo bem, como confirmado pelo OP .13
para14
números significativos.Vou tentar jogar mais isso com o tempo. Uma explicação, possivelmente muito longa, em breve.
Experimente Online! (Ideona)
fonte
Mathematica, 39 bytes
Constrói uma equação baseada nas distâncias entre os vértices e um ponto
{x,y}
. Em seguida, usa aNArgMin
função para encontrar um mínimo global para essa equação, que será o ponto de Fermat por definição.fonte