Відповіді:
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])/2a, 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