Jest to nieco podobne do centrów trójkąta , ale z innym punktem. Fermat Punkt jest punktem P w trójkącie ABC takie, że wartość AP + BP + CP jest zminimalizowane. Istnieją dwa przypadki:
Jeśli kąt jest większy niż 120 stopni, ten wierzchołek jest punktem końcowym. W przeciwnym razie narysuj trójkąty równoboczne po każdej stronie ABC. Połącz najdalszy wierzchołek każdego trójkąta równobocznego z przeciwległym wierzchołkiem trójkąta ABC. Wykonanie tego dla każdego z trzech trójkątów równobocznych powoduje powstanie jednego wspólnego punktu przecięcia dla wszystkich trzech linii, którym jest Punkt Fermata.
Powinien działać w ciągu 5 sekund na rozsądnej maszynie.
Dane wejściowe : zestaw 3 punktów, niekoniecznie liczb całkowitych. Może to być traktowane jako zagnieżdżona tablica, łańcuch, lista krotek itp. (Cokolwiek pasuje do twojego języka).
Wyjście : ponownie współrzędne punktu Fermata, jednak twój język najlepiej obsługuje punkty. Niedokładności zmiennoprzecinkowe nie będą liczone przeciwko tobie.
Przypadki testowe :
[[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]
To jest golf golfowy, więc wygrywa najkrótszy kod!
-0.0
dane wyjściowe są zastępowane przez niektóre0.0
s?Odpowiedzi:
Haskell,
346291285 bajtówTen sam kod z kilkoma objaśnieniami
Testy:
Wynik:
źródło
£
i¤
jako 2 operatorów bajtowych, ale nie wtedy, gdy zakodowany jako ISO-8859-1 z£
i¤
jako 1 bajt operatorów. Dostępne operatory 1 bajt w UTF-8 są!
,#
,%
,&
,?
. Należy wymienić 2 bajty operatorów lub dostosować liczbę bajtów.Pyton,
475448440 bajtówKażda pomoc w golfie jest doceniana.
Nie golfowany:
Wejście:
Wynik:
źródło
from math import*
jest dość powszechnym golfem. Pozwoli to również na użyciepi
zamiast kodowania na stałe (dla tej samej długości2*pi/3
). Można również spaść dużo białych znaków takich jak:d=lambda x,y:(...
.Python 3.5,
10191016998982969953 bajtów:Niewiarygodnie długi w porównaniu do innych odpowiedzi, ale hej, przynajmniej działa! Nie mógłbym być bardziej zadowolony z wyniku, który uzyskałem, ponieważ musi to być jedno z najtrudniejszych wyzwań, jakie kiedykolwiek podjąłem. Jestem tak szczęśliwy, że to naprawdę działa! : D Teraz, do bardziej technicznych uwag:
H((1,1),(2,2),(1,2))
będzie działać, ale tak będzieH([1,1],[2,2],[1,2])
.-0.0
zamiast0.0
niektórych danych wejściowych. Na przykład dane wyjściowe dla danych wejściowych[-1, -1], [1, -1], [0, 1]
to[-0.0, -0.4226497308103744]
.Mam nadzieję, że jest to w porządku, chociaż jeśli nie, zmienię to, choć będzie mnie to kosztowało jeszcze kilka bajtów.Jest to w porządku, co potwierdza OP .13
do14
znaczących liczb.Z czasem spróbuję zagrać w golfa. Wyjaśnienie, być może bardzo długie, już wkrótce.
Wypróbuj online! (Ideone)
źródło
Mathematica, 39 bajtów
Konstruuje równanie na podstawie odległości między wierzchołkami i punktem
{x,y}
. Następnie używaNArgMin
funkcji do znalezienia globalnego minimum dla tego równania, które z definicji będzie punktem Fermata.źródło