Відповіді:
t=input()
s=a=sum(t)/2.
for x in t:a*=s-x
print a**.5
Вхід: 2,3,4
Вихід: 2.90473750966
Математика 23
√Times@@(+##/2-{0,##})&
Sqrt[Tr@#*Times@@(Tr@#-2#)]/4&
(Tr@#Times@@(Tr@#-2#))^.5/4&
, або 27 за допомогою змінної
a,b,c=input()
s=(a+b+c)*.5
print(s*(s-a)*(s-b)*(s-c))**.5
Використання формули Герона .
Використання зразка:
$ echo 2,3,4 | python triangle-area.py
2.90473750966
$ echo 3,4,5 | python triangle-area.py
6.0
Варіант 58 байт:
a,b,c=input()
print((a+b+c)*(b+c-a)*(a+c-b)*(a+b-c))**.5/4
*.5
замість /2
?
a+b+c
непарної, результат буде помилковим. Це змінилося в Python 3, хоча більшість представлень гольфу вважається Python 2.7, якщо не вказано інше (так само, як уявлення Perl вважаються 5.10+, а не Perl 6).
f=function(...)prod(sum(...)/2-c(0,...))^.5
Використовуючи також формулу Герона, але скориставшись векторизацією R.
Завдяки @flodel за ідею еліпсису.
Використання:
f(2,3,4)
[1] 2.904738
f(3,4,5)
[1] 6
function(...)prod(sum(...)/2-c(0,...))^.5
. Або навіть function(x)prod(sum(x)/2-c(0,x))^.5
якщо ви називаєте свою функцію вектором.
v=prompt().split(/,/g);s=v[0]/2+v[1]/2+v[2]/2;Math.sqrt(s*(s-v[0])*(s-v[1])*(s-v[2]))
Не добре, але весело :) Також чапля ... демонструє невирішеність простих проблем у JS lol
Примітка : запустіть з консолі, щоб побачити результат.
88-> 85: Вилучені a
, b
і c
.
(a=v[0])a
довше, ніж v[0]v[0]
.
s=(v[0]+v[1]+v[2])/2
a, b, c = 3,4,5, це призведе "345"/2=172.5" and not 6. Improved without
до ,
b` і c
хоча.
s=(-v[0]-v[1]-v[2])/2
а інший змініть -
на +
. Це парна кількість термінів, тому вона скасовується.
З 4 байтами, збереженими @swish.
Це повертає точну відповідь:
Area@SSSTriangle@
Приклад
Area@SSSTriangle[2,3,4]
Щоб повернути відповідь у десятковій формі, потрібні два додаткові байти.
N@Area@SSSTriangle[2,3,4]
2.90474
Area@*SSSTriangle
readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
Дуже пряма реалізація формули Герона. Приклад виконання:
Prelude> readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
[2,3,4]
2.9047375096555625
Prelude>
Зауважте, що він приймає будь-яке числове введення, а не лише цілі числа. І якщо введення вже є l, рішення має бути лише 36 символів, а якщо ми не зацікавлені в друкуванні відповіді, рішення має бути лише 30 символів. Більше того, що якщо ми можемо дозволити собі змінити формат введення, ми можемо видалити ще 3 символи. Отже, якщо наш внесок виглядає як [2,3,4,0.0] і вже є l, ми можемо отримати відповідь лише:
sqrt$product$map(sum l/2-)l
Приклад виконання:
Prelude> let l = [2,3,4,0.0]
Prelude> sqrt$product$map(sum l/2-)l
2.9047375096555625
Prelude>
<?=sqrt(($s=array_sum($c=fgetcsv(STDIN))/2)*($s-$c[0])*($s-$c[1])*$s-=$c[2]);
Використання:
php triangle.php
2,3,4
Вихід: 2.9047375096556
Я не думаю, що я можу скоротити її? Я все ще новачок у гольфі. Хто-небудь дасть мені знати, якщо я щось пропустив.
Дякую Примо, що врятував мене 1 байт, лол.
($s-$c[2])
можна замінити $s-=$c[2]
на один байт, але це все, що я бачу.
s=(eval('abc '.split('').join('=prompt()|0;'))+a+b)/2;Math.sqrt(s*(s-a)*(s-b)*(s-c))
Ще одне рішення JavaScript, засноване на формулі Герона, але намагається інший підхід для завантаження змінних. Потрібно запустити з консолі. Кожна сторона вводиться в окремому підказці.
EDIT : Використовуйте повернене значення, eval
щоб зберегти 2 символи. Удари @tomsmeding, wahoo! :)
½*Nx
NmnU ×*U q
Збережено 2 байти завдяки ETH, що вказує на надмірний новий рядок та деякі альтернативні способи зменшення масиву.
NmnU ×*U q
, NmnU r*U q
,Np0 mnU ×q
proc R {a b c} {set s ($a+$b+$c)/2.
expr sqrt($s*($s-$a)*($s-$b)*($s-$c))}
Передайте сторони як аргумент.
Для вхідного 2 3 4
значення значення s
дорівнює (2+3+4)/2.
як рядок. Подвійна оцінка FTW.
proc
, він поширюється лише на 81 байт: tio.run/##NYo7CoAwEAV7T/…
4⁻¹√(sum(Ansprod(sum(Ans)-2Ans
Починаючи з розпорядку формули Герона написаного Кеннетом Хаммоном (Weregoose) , я зіграв у два байти. Зауважте, що TI-BASIC є токенізованим, і кожен маркер, як Ans
іprod(
, є одним або двома байтами в пам'яті калькулятора.
Введіть через Ans
тобто форму {a,b,c}:[program name]
.
Пояснили:
sum(Ans)-2*Ans (a+b+c)-2{a,b,c}={b+c-a,c+a-b,a+b-c}
Ans*prod( {a,b,c}*(b+c-a)(c+a-b)(a+b-c)
sum( (a+b+c)(b+c-a)(c+a-b)(a+b-c)
4⁻¹*√( √((a+b+c)(b+c-a)(c+a-b)(a+b-c)/16)
=√(s(s-a)(s-b)(s-c))
#define f(a,b,c)sqrt((a+b+c)*(a+b-c)*(a-b+c)*(b+c-a))/4
Ще одна реалізація формули Героя.
#include<stdio.h>
#include<math.h>
main()
{
double a,b,c,s,area;
scanf("%d %d %d" &a,&b,&c);
s=sqrt((a*a)+(b*b)+(c*c));
area=[sqrt(s*(s-a)*(s-b)*(s-c))]/2;
}
-MList::Util=sum -ap
, 40 байт$r=$t=.5*sum@F;map$r*=$t-$_,@F;$_=sqrt$r