Это несколько похоже на центры треугольника , но с другой точкой. Точка Ферма - это точка P в треугольнике ABC, так что значение AP + BP + CP минимизировано. Есть два случая:
Если угол больше 120 градусов, эта вершина является точкой ферма. В противном случае нарисуйте равносторонние треугольники на каждой из сторон ABC. Соедините дальнюю вершину каждого равностороннего треугольника с противоположной вершиной треугольника ABC. Выполнение этого для каждого из трех равносторонних треугольников приводит к единой общей точке пересечения для всех трех линий, которая является точкой Ферма.
Он должен работать в течение 5 секунд на разумной машине.
Ввод : набор из 3 точек, не обязательно целых чисел. Это может быть воспринято как вложенный массив, строка, список кортежей и т. Д. (Все, что подходит вашему языку).
Вывод : опять же, координаты точки Ферма, однако ваш язык лучше всего обрабатывает точки. Неточности с плавающей точкой не будут засчитаны против вас.
Тестовые случаи :
[[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]
Это кодовый гольф, поэтому выигрывает самый короткий код!
-0.0
вывод вместо некоторых0.0
s?Ответы:
Haskell,
346291285 байтТот же код с некоторыми пояснениями
тесты:
Выход:
источник
£
и¤
как 2-байтовые операторы, но не когда он закодирован как ISO-8859-1 с£
и¤
как 1-байтовые операторы. Доступные операторы 1 байт в UTF-8!
,#
,%
,&
,?
. Вам следует заменить 2-х байтовые операторы или настроить количество байтов.Python,
475448440 байтЛюбая помощь в гольф в дальнейшем приветствуется.
Ungolfed:
Входные данные:
Выход:
источник
from math import*
это довольно распространенный гольф. Это также позволит вам использоватьpi
вместо жесткого кодирования (такой же длины для2*pi/3
). Вы также можете оставить много пробелов , как:d=lambda x,y:(...
.Python 3.5,
10191016998982969953 байта:Невероятно долго по сравнению с другими ответами, но, по крайней мере, это работает! Я не мог быть счастливее от результата, который я получил, поскольку это должно быть одним из самых сложных испытаний, которые я когда-либо делал. Я так счастлив, что это действительно работает! : D Теперь перейдем к более техническим примечаниям:
H((1,1),(2,2),(1,2))
будет работать, но так будетH([1,1],[2,2],[1,2])
.-0.0
вместо0.0
некоторых входов. Например, выходной сигнал для ввода[-1, -1], [1, -1], [0, 1]
является[-0.0, -0.4226497308103744]
.Я надеюсь, что это хорошо, хотя если это не так, я изменю это, хотя это будет стоить мне еще несколько байтов.Это нормально, что подтверждается ОП .13
до14
значимых цифр.Я постараюсь играть в гольф с течением времени. Объяснение, возможно, очень длинное, скоро появится.
Попробуйте онлайн! (Ideone)
источник
Mathematica, 39 байт
Создает уравнение, основанное на расстояниях между вершинами и точкой
{x,y}
. Затем используетNArgMin
функцию, чтобы найти глобальный минимум для этого уравнения, который по определению будет точкой Ферма.источник