Учитывая три длины стороны треугольника, оцените его соотношение сторон AR, используя следующую формулу:
где
Чем ближе к равносторонности треугольник, тем ближе к 1
его аспектному соотношению. Соотношение сторон больше или равно 1
для правильных треугольников.
входные
Входные данные представляют собой три действительных положительных числа, которые могут быть включены в список или что-либо подобное, если это необходимо.
Ваша программа должна выводить одно и то же значение независимо от того, в каком порядке введены три длины сторон.
Эти три номера всегда будут действительны sidelengths треугольника (вырожденные треугольники , как один с sidelengths 1
, 1
и 2
не будет передан в качестве вклада). Вам не нужно беспокоиться о неточностях с плавающей запятой, когда значения становятся очень близко к вырожденному треугольнику (например, допустимо, что ваша программа выдаст ошибку division by 0
при вводе [1, 1, 1.9999999999999999]
).
Входные данные могут быть переданы через STDIN
аргумент функции или что-либо подобное.
Выходы
Вывод представляет собой действительное число, большее или равное 1
стандартной точности, приемлемой для вашего языка.
Вывод может быть распечатан STDOUT
, возвращен из функции или чем-то подобным.
Контрольные примеры
Inputs Output
1 1 1 1
3 4 5 1.25
42 42 3.14 ≈ 6.9476
14 6 12 1.575
6 12 14 1.575
0.5 0.6 0.7 ≈ 1.09375
счет
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
источник
42.0
вместо42
.0
?Ответы:
Желе , 6 байт
Этот ответ основан на ответе Эминьи 05AB1E . Большое спасибо Деннису и Линн за помощь в выяснении этого ответа. Предложения по игре в гольф приветствуются! Попробуйте онлайн!
Ungolfing
источник
⁸÷
он отключается от цепочки как единое целое и должен читаться как деление начального левого аргумента на это или что-то еще.Желе , 7 байт
Попробуйте онлайн!
объяснение
Давайте прочитаем эту цепочку:
Неявный аргумент - это список
[a, b, c]
.Сначала мы читаем
S
. Это берет сумму:a + b + c
.Затем мы читаем
H
. Это вдвое меньше(a + b + c)/2
. (Этоs
.)Затем мы читаем диаду
_
(вычитаем), а затем еще одну диаду. Это хук : ему не хватает правильного аргумента, поэтому он получает аргумент для этой цепочки[a, b, c]
, давая нам[s-a, s-b, s-c]
. (Это пятая цепочка в таблице здесь .)Затем мы читаем пару диада-монада
÷@H
. Это разветвление :÷@
это деление с перевернутыми аргументами, иH
оноH
делится пополам , так что наше рабочее значение получает от него аргумент этой цепочки÷
. Это векторизация; мы остались с[(a/2)/(s-a), (b/2)/(s-b), (c/2)/(s-c)]
. (Это второй шаблон цепочки в таблице здесь .)Наконец, мы берем продукт
P
, получая насabc/(8(s-a)(s-b)(s-c))
.Просмотрите древовидный график того, как ссылки сочетаются друг с другом.
источник
Желе , 6 байт
Попробуйте онлайн!
Как это работает
источник
³⁴⁵
качестве аргументов ...JavaScript, 38 байт
Это ( карри ) лямбда:
(Если вы назначите его переменной,
f
вам нужно будет вызвать его какf(3)(4)(5)
)источник
s = 1/2(a+b+c)
к формуле и упростите: D (напримерs-a = .5*b+.5*c-.5*a
, и три фактора.5
отмены с помощью8
)(a,b,c)=>
такой же длины и стоит меньше байтов для вызова;)05AB1E ,
117 байт05AB1E использует кодировку CP-1252 .
Попробуйте онлайн!
объяснение
источник
MATL ,
87 байтПопробуйте онлайн!
объяснение
Давайте использовать вход
[3 4 5]
в качестве примераисточник
R,
3429 байтСчитывает ввод из stdin и сохраняет как R-вектор
x
. Затем используйте векторизацию R для формирования знаменателя.источник
Haskell, 36 байт
Это определяет функцию,
#
которая принимает три аргумента.Вы должны назвать это следующим образом:
(3#4)5
Чуть дольше, но, возможно, более пригодный для игры в гольф:
источник
MATLAB,
64 3825 байтЭто функция anyonmous, которая реализует формулу, как указано ниже:
Предполагается, что входные данные являются списком из трех значений, например
[3,4,5]
. Этот пример используется в следующем объяснении:источник
Mathematica, 20 байтов
Принимает ввод как список из трех значений, который упоминается как
#
внутри функции.Tr@
кратчайший способ суммировать список (чтобы получить2s
) и1##&@@(...)
умножает три фактораi/(2s-2i)
наi
вa, b, c
.Если входными данными являются целые или рациональные числа, вы получите точный результат.
источник
Python 3 , 42 байта
Попробуйте онлайн!
источник
OCaml, 51 байт
Ууу, отдельные операторы для поплавков ...
источник
Чудо , 48 байт
ПОКОЙСЯ С МИРОМ
Использование:
объяснение
Вызовы функций в Wonder обходятся дороже по сравнению с инфиксными операторами на других языках. Из-за этого я содержал все термины в массиве и получал произведение результата вместо умножения каждого отдельного члена. Код будет эквивалентен чему-то вроде:
источник
На самом деле ,
108 байтЭтот ответ основан на превосходном ответе Дениса на желе . Предложения по игре в гольф приветствуются! Попробуйте онлайн!
Ungolfing
источник
Minecraft 1.8, 1607 байт + 85 блоков = 1692 байт
Предупреждение: не гольф. Golfed будет принимать до 1 / 3 меньше blytes.
Вот прокомментированный скриншот:
Входы
a
,b
иc
, и выходfin
fin
и все остальные переменные в Minecraft являются целыми числами, поэтому стандартная точность Minecraft равна 0 десятичных знаковЗеленая граница: блоки команд слева активируются после блоков справа, которые являются просто инициализацией переменных.
Рычаг (серо-коричневый прямоугольник внизу справа) является спусковым механизмом
Это занимает так много из-за того, как Minecraft обрабатывает переменные . Очень упрощенный обзор:
/scoreboard objectives add name dummy
создает новую переменную с именем "name
"/scoreboard players set @p name number
устанавливает переменнуюname
вnumber
. Число должно быть действительным числом, а не переменной./scoreboard players operation @p name += @p name2
увеличиваетсяname
наname2
.name2
должна быть переменной, а не числом.-=
,/=
,*=
,=
И многое другое можно использовать вместо ,+=
чтобы декремент, умножить, разделить и т.д.Я не собираюсь публиковать здесь все 43 команды. Это помогло бы в игре в гольф, но также помогло бы свести меня с ума.
Если бы использовались командные блоки 1.9, решение (как минимум) использовало бы на 42 блока меньше. Если бы использовались однобуквенные переменные, было бы сохранено почти 200 байтов.
источник
Java, 38 байт
Тестирование и разгул
Попробуй это!
Выход
источник
(a,b,c)
это что-то вроде обмана, потому что в нем нет информации о типах. IMO неявный лямбда-интерфейс (в вашем случаеF
) должен учитываться в общей байтовой сумме.Медузы ,
1716 байтСпасибо Zgarb за сохранение 1 байта.
Попробуйте онлайн!
объяснение
Это основано на той же формуле взаимности и ответ Денниса. .
В более традиционных функциональных обозначениях вышеприведенная программа выглядит следующим образом:
Где
i
находится список ввода. Обратите внимание, чтоfold(multiply, ...)
просто вычисляется произведение иfold(add, ...)
сумма, поэтому мы можем еще больше упростить это до:sum(i) / i
Осуществляется с помощью крючка ,)/+
который определяет новую унарную функцию , чтобы сделать оба шага сразу.источник
Dyalog APL ,
109 байтовЭто последовательность анонимных функций (поверх разветвления разветвления разветвления), означающая, что каждая подфункция применяется к аргументу внутри следующей структуры:
Попробуй APL онлайн!
×/
продукт⊢
аргументы÷
деленное на+/
сумма аргументов-
минус+⍨
аргументы удвоились (лит. добавил к себе)Математическое обоснование.
Нгн побрил байт.
источник
2sable , 6 байт
Порт Денниса Желе ответ .
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
постоянный ток, 49 байт
Прямая реализация приведенной формулы. Запрашивает три входа при вызове в трех отдельных строках и выводит значение с плавающей запятой с 5 цифрами после десятичной точки на следующую строку.
объяснение
источник
TI-Basic, 11 байт
Ввод должен быть в виде списка, вроде
{A B C}
.Может быть, этот визуальный поможет (помните, что
2s = a+b+c
):источник
Perl 6 , 44 байта
источник
Python, 55 байт
Кредит Деннису . Я просто портировал. В Python очень забытый язык.
источник
Далее 83 байта
Предполагается, что параметры с плавающей запятой начинаются со стека с плавающей запятой. Оставляет результат в стеке с плавающей запятой. Использование стека для параметров / возврата является стандартом для Forth.
Попробуйте онлайн - содержит все контрольные примеры
Использует формулу
a*b*c * 1/ ( -(a+b-c) * -(b+c-a) * (a+c-b) )
. Практически вся программа использует только стек с плавающей запятой. Исключением является3
в3 fpick
. Эта программа требует переводчика, который поддерживаетfpick
(Ideone работает, repl.it нет).Пояснение: чуть меньше в гольф
источник
ised : 19 байт
Назовите его как
ised --l 'inputfile.txt' '@*$1/@*{@+$1-2.*$1}'
гдеinputfile.txt
может быть файл с массивом, разделенным пробелом, или-
для получения из pipe / stdin.Версия Unicode (та же bytecount, но на 3 знака меньше):
К сожалению,
ised
тратит много символов на синтаксис входного аргумента.источник
VBA, 76
Позвонить с
или в Excel с
источник
Public Function r(a,b,c):r=a*b*c/(b+c-a)/(a-b+c)/(a+b-c):End Function
C #, 82 байта
Использование:
источник
Пайк, 12 байт
Попробуй это здесь!
Ну, BlueEyedBeast, у тебя был шанс. Я использовал хороший алгоритм здесь.
источник
к, 19 байт
Оценивает справа налево - разделить список x на 2, суммировать результат и вычесть его из исходного x. Откажитесь от ответа и получите произведение результата и 8. Результат - знаменатель, числитель - произведение списка.
источник
Луа, 45 байт
Сильно основано на ответе JavaScript.
источник