Вы можете определить объем объектов на основе заданного набора измерений:
- Объем сферы может быть определен с помощью одного числа, радиус (
r
) - Объем цилиндра можно определить с помощью двух чисел, радиуса (
r
) и высоты (h
) - Объем коробки можно определить, используя три числа: длину (
l
), ширину (w
) и высоту (h
) - Объем неправильной треугольной пирамиды можно определить с помощью четырех чисел: длины сторон (
a, b, c
) и высоты (h
).
Задача состоит в том, чтобы определить объем объекта с помощью одного из следующих входных данных:
- Одно число
(r)
или(r, 0, 0, 0)
=>V = 4/3*pi*r^3
- Два числа
(r, h)
или(r, h, 0, 0)
=>V = pi*r^2*h
- Три числа
(l, w, h)
или(l, w, h, 0)
=>V = l*w*h
- Четыре числа
(a, b, c, h)
=>V = (1/3)*A*h
, гдеA
определяется по формуле Герона :A = 1/4*sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c))
Правила и разъяснения:
- Входные данные могут быть как целыми, так и / или десятичными
- Вы можете предположить, что все входные размеры будут положительными
- Если Pi закодирован оно должно быть с точностью до:
3.14159
. - Вывод должен содержать не менее 6 значащих цифр, за исключением чисел, которые могут быть точно представлены с меньшим количеством цифр. Вы можете вывести
3/4
как0.75
, но4/3
должно быть1.33333
(больше цифр в порядке)- Как округлять неточные значения необязательно
- Поведение для неверного ввода не определено
- Стандартные правила для ввода / вывода. Ввод может быть списком или отдельными аргументами
Это код гольф, поэтому выигрывает самое короткое решение в байтах.
Тестовые случаи:
calc_vol(4)
ans = 268.082573106329
calc_vol(5.5, 2.23)
ans = 211.923986429533
calc_vol(3.5, 4, 5)
ans = 70
calc_vol(4, 13, 15, 3)
ans = 24
code-golf
math
arithmetic
geometry
Стьюи Гриффин
источник
источник
Ответы:
MATL ,
57535144 байтаВвод представляет собой массив с 1, 2, 3 или 4 числами.
Попробуйте онлайн!
объяснение
Вместо того, чтобы использовать вложенные
if
циклы, которые дороги в байтах, это вычисляет четыре возможных результата для любого ввода, а затем выбирает соответствующий результат в зависимости от длины ввода.При вычислении результатов, даже если только один из них должен быть действительным, другие не могут выдавать ошибки. Это означает, например, что индексирование четвертого элемента ввода не допускается, поскольку вход может содержать менее четырех элементов.
источник
Витси, 49 байтов
Я думал, что вы передали это мне на тарелку, но я нашел неразрешенную ошибку, чтобы обойти. Но мне не больно.
По сути, поскольку входные данные имеют определенную длину для различных функций, вы ложите мне синтаксис моего метода для выполнения этой работы. Так что, ура, успехов!
Пояснение, одна строка за раз:
Ввод принимается в качестве аргументов командной строки в точном обратном порядке, как они появляются в вопросе, без конечных нулей.
Попробуйте онлайн!
Кроме того, вот то, что в настоящее время находится в разработке.
Java с пакетом Vitsy
Обратите внимание, что этот пакет находится в стадии разработки; это просто, чтобы показать, как это будет работать в будущем (документация для этого еще не загружена), и это не игра в гольф, а буквальный перевод:
источник
С,
10097 байтредактировать 1: удалить ненужные десятичные
.
, спасибо Immibis!источник
4./3.
быть просто4/3.
? А может2.
и12.
просто быть,2
и12
?JavaScript ES6,
12912612511611490 байтБлагодаря Stewie Griffin удалось сэкономить много байтов (9) с прекрасной формулой! Поскольку входные данные должны быть ненулевыми, их
variable?
будет достаточно для определения-проверки.Проверьте это!
источник
Uncaught SyntaxError: Unexpected token =
(ссылаясь наZ=a*a
)h
, которое выглядит как недосмотр.Haskell,
11410910710199 байтПринимает список номеров и возвращает объем. Назови это как
для сферы и т. д. Функция является полиморфной для любого типа, который реализует
sqrt
(так, в основномFloat
илиDouble
).Он не собирается выигрывать конкурсы на краткость. Но обратите внимание, насколько это читабельно . Даже если вы на самом деле не знаете Haskell, вы можете легко понять, что он делает. Синтаксис соответствия шаблонов в Haskell позволяет легко определять странные функции, которые делают что-то совершенно другое в зависимости от формы ввода.
источник
(1/3)*(1/4)*h
почему нетh/12
? Экономит много байтов!.
и#
и$
и она становится Mathematica суп.PowerShell,
165161 байтИтак ... много ... долларов ... (31 из 161 символов
$
для 19,25% кода) ... но сэкономили 4 байта благодаря Стью Гриффину!Мы берем четыре входа, а затем постепенно индексируем псевдо-троичные утверждения на их основе в обратном порядке. Например, снаружи
(..., ...)[!$h]
проверяется наличие четвертого входа. Если это так,!$h
воля будет равна,0
и первая половина будет выполнена (объем неправильной трехугольной пирамиды). В противном случае значение!$h
with$h = $null
(поскольку оно неинициализировано) будет равно1
, поэтому оно переходит ко второй половине, которая сама по себе является псевдо-троичной,[!$c]
и так далее.Это, вероятно, близко к оптимальному, поскольку предположительно более короткая формула, которую (например) использует Cᴏɴᴏʀ O'Bʀɪᴇɴ, на самом деле на 2 байта длиннее в PowerShell из-за отсутствия
^
оператора ... Единственная реальная экономия достигается за счет(1/3)*(1/4)*A*$h
игры в гольфA*$h/12
и установка$p
позже, чтобы сохранить пару байтов вместо длинного[math]::PI
вызова.источник
CJam,
6766 байтЯ буду работать над сокращением его в ближайшее время. Попробуйте онлайн !
Объяснение впереди.
источник
Серьезно,
655955 байтПопробуйте онлайн!
объяснение
Это дурацкий. Я собираюсь разбить объяснение на несколько частей.
Основное тело:
Функция 0:
Функция 1:
Функция 2:
Функция 3 (21 байт; почти половина длины программы!)
источник
Matlab, 78 байт
Совершенно уверен, что он не может быть короче этого.
~b
,~c
И~d
, в0
случае каждого из размеров не равны нулю. Формула с нулевым измерением просто даст ноль. Таким образом, каждая из формул может быть просто суммирована. Нетif
иelse
обязательно.Назовите это так (или попробуйте онлайн ):
источник
Python
32,127119116 байтовКредит для кого-нибудь и Мего за всю их помощь в игре в гольф. Кредит также Cᴏɴᴏʀ O'Bʀɪᴇɴ и Джошем как я позаимствовал часть своих ответов на этот.
Ungolfed:
источник
def v(a,b,c,d):z=a*a;p=355/113;return[x for x in[(4*z*b*b-(z+b*b-c*c)**2)**.5*d/12,a*b*c,p*z*b,p*z*a*4/3]if x][0]
при условии, что ввод дополнен с0
.def v(a,b,c,d):z=a*a;P=3.14159;return filter(int,[(4*z*b*b-(z+b*b-c*c)**2)**.5*d/12,a*b*c,P*z*b,P*z*a*4/3])[0]
Математика, 114 (103)
Чистая функция: 114
Ungolfed:
Использование:
Если разрешены именованные функции: 103
Использование:
источник
#1==#
Я думаю,Quiet[x_]:=Quiet[x,All]
и π (Alt-P на Mac) вписывается в расширенный ASCII.#1 #2 #3
на1##
? Не забудьте#==#1
Фактор, 783 байта
Ну, это заняло вечность.
Вызов
{ array of numbers } volume
.источник