Dies ähnelt in gewisser Weise den Mittelpunkten eines Dreiecks , hat jedoch einen anderen Punkt. Der Fermat-Punkt ist der Punkt P im Dreieck ABC, so dass der Wert von AP + BP + CP minimiert wird. Es gibt zwei Fälle:
Wenn ein Winkel größer als 120 Grad ist, ist dieser Scheitelpunkt der Fermatpunkt. Zeichnen Sie andernfalls gleichseitige Dreiecke an jeder Seite von ABC. Verbinden Sie den äußersten Scheitelpunkt jedes gleichseitigen Dreiecks mit dem gegenüberliegenden Scheitelpunkt des Dreiecks ABC. Wenn Sie dies für jedes der drei gleichseitigen Dreiecke tun, erhalten Sie einen gemeinsamen Schnittpunkt für alle drei Linien, den Fermat-Punkt.
Es sollte innerhalb von 5 Sekunden auf einem vernünftigen Computer ausgeführt werden.
Eingabe : Ein Satz von 3 Punkten, nicht unbedingt ganze Zahlen. Dies kann als verschachteltes Array, als Zeichenfolge, als Liste von Tupeln usw. verwendet werden (je nachdem, was für Ihre Sprache geeignet ist).
Ausgabe : Die Koordinaten des Fermat-Punkts, jedoch behandelt Ihre Sprache Punkte am besten. Fließkomma-Ungenauigkeiten werden nicht mitgezählt.
Testfälle :
[[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]
Das ist Codegolf, also gewinnt der kürzeste Code!
-0.0
anstelle einiger0.0
s ausgegeben wird ?Antworten:
Haskell,
346291285 BytesDerselbe Code mit einigen Erklärungen
Tests:
Ausgabe:
quelle
£
und¤
als 2-Byte-Operatoren codiert ist, jedoch nicht, wenn er als ISO-8859-1 mit£
und¤
als 1-Byte-Operatoren codiert ist . Die zur Verfügung stehenden 1 - Byte - Operatoren in UTF-8!
,#
,%
,&
,?
. Sie sollten die 2-Byte-Operatoren ersetzen oder Ihre Byteanzahl anpassen.Python,
475448440 BytesJede weitere Hilfe zum Golfen ist willkommen.
Ungolfed:
Eingang:
Ausgabe:
quelle
from math import*
ist ein ziemlich häufiges Golfspiel. Dadurch können Sie es auch verwenden,pi
anstatt es hart zu codieren (gleiche Länge für2*pi/3
). Sie können auch sehr viele Leerzeichen fallen wie:d=lambda x,y:(...
.Python 3.5,
10191016998982969953 Bytes:Unglaublich lange im Vergleich zu anderen Antworten, aber hey, zumindest funktioniert es! Ich könnte mit dem Ergebnis nicht zufriedener sein, da dies eine der schwierigsten Herausforderungen sein muss, die ich je gemacht habe. Ich bin einfach so froh, dass es tatsächlich funktioniert! : D Nun zu den technischen Anmerkungen:
H((1,1),(2,2),(1,2))
wird funktionieren, aber auchH([1,1],[2,2],[1,2])
.-0.0
anstelle der0.0
für einige Eingaben. Zum Beispiel kann der Ausgang für die Eingabe[-1, -1], [1, -1], [0, 1]
ist[-0.0, -0.4226497308103744]
.Ich hoffe, das ist in Ordnung, aber wenn nicht, werde ich es ändern, obwohl es mich ein paar Bytes mehr kosten wird.Dies ist in Ordnung, wie vom OP bestätigt .13
auf14
signifikante Zahlen genau sein .Ich werde versuchen, dies im Laufe der Zeit noch weiter zu verbessern. Eine Erklärung, möglicherweise sehr lang, kommt bald.
Probieren Sie es online! (Ideone)
quelle
Mathematica, 39 Bytes
Konstruiert eine Gleichung basierend auf den Abständen zwischen den Eckpunkten und einem Punkt
{x,y}
. Verwenden Sie dann dieNArgMin
Funktion, um ein globales Minimum für diese Gleichung zu finden, bei dem es sich per Definition um den Fermat-Punkt handelt.quelle