Круги и квадраты имеют единую, определенную центральную точку. Однако понятие центра треугольника уже давно обсуждается. Древним грекам были известны четыре разных центра:
- Incenter : пересечение угловых биссектрис треугольника
- Центроид : пересечение линий от каждой вершины треугольника до середины его противоположной стороны
- Круговой центр : пересечение перпендикулярных биссектрис сторон
- Ортоцентр : пересечение высот треугольника
Позже Эйлер доказал, что центроид, окружность и ортоцентр коллинеарны в любом треугольнике. Линия, на которой эти три точки находятся в треугольнике, называется линией Эйлера . Он определяется для каждого треугольника, кроме равностороннего треугольника, где все точки совпадают.
Ваша задача - создать самую короткую программу или функцию, которая при наличии двух входов выводит определенный центр или линию Эйлера треугольника. Первый указывает координаты каждой вершины треугольника. Второе - целое число от 1 до 5, определяющее, что выводить.
1 - Incenter
2 - Centroid
3 - Circumcenter
4 - Orthocenter
5 - Equation of Euler Line
(if the Euler Line is vertical, output the `x` value of the line
(e.g. output `5` if the equation of the line is `x = 5`))
Вы можете предположить, что данные вершины никогда не будут коллинеарными, и что они всегда будут целочисленными координатами (это также исключает возможность наличия равностороннего треугольника в качестве входных данных, согласно комментарию @ R.Kap ).
Массив ввода должен быть допустимым вложенным массивом на вашем языке, а ввод должен быть в любом приемлемом формате. Любые значения с плавающей запятой должны отображаться с точностью не менее 3 десятичных знаков, но не менее. Выводимая точка должна быть допустимым массивом на вашем языке, соответствующим формату ввода.
Тестовые случаи:
Input: [(-2, 0), (1, 0), (0, 1)] 1
Output: (-0.089, 0.451)
Input: [(-2, 0), (1, 0), (0, 1)] 2
Output: (-0.333, 0.333)
Input: [(-2, 0), (1, 0), (0, 1)] 3
Output: (-0.5, -0.5)
Input: [(-2, 0), (1, 0), (0, 1)] 4
Output: (0, 2)
Input: [(-2, 0), (1, 0), (0, 1)] 5
Output: 5x + 2
Пояснение: входные данные могут быть либо из stdin, либо через пробел, либо через новую строку, либо как аргументы функции. Вывод, однако, должен быть записан на стандартный вывод.
y=f(x)
.(if the triangle is equilateral, output the point at which the centers meet)
как это не возможно создать равносторонний треугольник на координатной плоскости , используя только целое число координат.Ответы:
Питон -
908870Новые строки были добавлены для уменьшения прокрутки. Это, вероятно, может быть дальше.
Тестовые случаи (аннотированные):
Как видите, возможны ошибки, вызванные использованием плавающей запятой.
Дальнейшее игра в гольф:
Основываясь на предложениях в комментариях ниже, мне удалось сделать это меньше.
источник
R=r.append
а затем использовать это для сохранения байтов?AutoHotkey - 731
Функция может быть более минимизирована (примерно до 600 символов ИЛИ меньше) путем сокращения имен переменных, таких как midx_a, midx_b и т. Д.
Вызов функции
источник
Python 3.5,
851772 байта:Принимает ввод как последовательность разделенных запятыми координат, за которыми следует целое число, передающее, что выводить. Например, если входные координаты
(1,0),(2,1),(1,4)
и вы хотите, чтобы ортоцентр треугольника соответствовал этим координатам, вы просто вызвали бы функцию следующим образом:Выводится в формате кортежа, если необходима конкретная точка, в формате строки с уравнением в форме,
y=mx+b
если требуется линия Эйлера, а линия не вертикальная, или простоx
значением линии, если линия Эйлера это необходимо , но линия находится в вертикальном положении .Таким образом, используя треугольник с вершинами
(1,0),(2,1),(1,4)
, получим:Я буду стараться играть в гольф с течением времени, где и когда смогу.
Попробуйте онлайн! (Ideone)
источник