Esto es algo similar a Los centros de un triángulo , pero con un punto diferente. El punto de Fermat es el punto P en el triángulo ABC, de modo que el valor de AP + BP + CP se minimiza. Hay dos casos:
Si hay un ángulo mayor de 120 grados, ese vértice es el punto de fermat. De lo contrario, dibuje triángulos equiláteros en cada uno de los lados de ABC. Conecte el vértice lejano de cada triángulo equilátero al vértice opuesto del triángulo ABC. Hacer esto para cada uno de los tres triángulos equiláteros da como resultado un único punto común de intersección para las tres líneas, que es el punto de Fermat.
Debe ejecutarse dentro de los 5 segundos en una máquina razonable.
Entrada : Un conjunto de 3 puntos, no necesariamente enteros. Esto se puede tomar como una matriz anidada, una cadena, una lista de tuplas, etc. (lo que se adapte a su idioma).
Salida : las coordenadas del punto Fermat, de nuevo, sin embargo, su idioma maneja mejor los puntos. Las imprecisiones de coma flotante no se contarán en su contra.
Casos de prueba :
[[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 es el código de golf, ¡el código más corto gana!
-0.0
se emite en lugar de algunos0.0
s?Respuestas:
Haskell,
346291285 bytesEl mismo código con algunas explicaciones.
Pruebas:
Salida:
fuente
£
y¤
como operadores de 2 bytes, pero no cuando se codifica como ISO-8859-1 con£
y¤
como operadores de 1 byte. Los operadores disponibles 1 byte en UTF-8 son!
,#
,%
,&
,?
. Debe reemplazar los operadores de 2 bytes o ajustar su recuento de bytes.Pitón,
475448440 bytesCualquier ayuda para el golf más se aprecia.
Sin golf:
Entrada:
Salida:
fuente
from math import*
Es un golf bastante común. Esto también le permitirá usarlo enpi
lugar de codificarlo (la misma longitud2*pi/3
). También puede dejar una gran cantidad de espacio en blanco como:d=lambda x,y:(...
.Python 3.5,
10191016998982969953 bytes:Increíblemente largo en comparación con otras respuestas, pero bueno, ¡al menos funciona! No podría estar más feliz con el resultado que obtuve, ya que este debe ser uno de los desafíos más difíciles que he hecho. ¡Estoy tan feliz de que realmente funcione! : D Ahora, en las notas más técnicas:
H((1,1),(2,2),(1,2))
funcionará, pero también lo haráH([1,1],[2,2],[1,2])
.-0.0
en lugar de0.0
algunas entradas. Por ejemplo, la salida para la entrada[-1, -1], [1, -1], [0, 1]
es[-0.0, -0.4226497308103744]
.Espero que esto esté bien, aunque si no lo está, lo cambiaré, aunque me costará unos pocos bytes más.Esto está bien, según lo confirmado por OP .13
a14
cifras significativas.Intentaré jugar más golf con el tiempo. Una explicación, posiblemente muy larga, próximamente.
¡Pruébelo en línea! (Ideona)
fuente
Mathematica, 39 bytes
Construye una ecuación basada en las distancias entre los vértices y un punto
{x,y}
. Luego usa laNArgMin
función para encontrar un mínimo global para esa ecuación, que será el Punto de Fermat por definición.fuente