Odpowiedzi:
t=input()
s=a=sum(t)/2.
for x in t:a*=s-x
print a**.5
Wejście: 2,3,4
Wynik: 2.90473750966
Mathematica 23
√Times@@(+##/2-{0,##})&
Sqrt[Tr@#*Times@@(Tr@#-2#)]/4&
(Tr@#Times@@(Tr@#-2#))^.5/4&, lub 27 przy użyciu zmiennej
a,b,c=input()
s=(a+b+c)*.5
print(s*(s-a)*(s-b)*(s-c))**.5
Korzystanie z formuły Herona .
Przykładowe użycie:
$ echo 2,3,4 | python triangle-area.py
2.90473750966
$ echo 3,4,5 | python triangle-area.py
6.0
58-bajtowy wariant:
a,b,c=input()
print((a+b+c)*(b+c-a)*(a+c-b)*(a+b-c))**.5/4
*.5zamiast drugiej linii /2?
a+b+cjest nieparzysta, wynik będzie błędny. Zmieniło się to w Pythonie 3, chociaż zakłada się, że większość zgłoszeń do golfa to Python 2.7, chyba że określono inaczej (tak jak przyjmuje się, że zgłoszenia w Perlu to 5.10+, a nie w Perl 6).
f=function(...)prod(sum(...)/2-c(0,...))^.5
Korzystając również ze wzoru Herona, ale korzystając z wektoryzacji R.
Dzięki @flodel za pomysł na elipsę.
Stosowanie:
f(2,3,4)
[1] 2.904738
f(3,4,5)
[1] 6
function(...)prod(sum(...)/2-c(0,...))^.5. Lub nawet function(x)prod(sum(x)/2-c(0,x))^.5jeśli wywołasz swoją funkcję za pomocą wektora.
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]))
Nie dobrze, ale fajnie :) Również Czapla ... Demonstruje niemożność rozwiązywania prostych problemów w JS lol
Uwaga : uruchom z konsoli, aby zobaczyć wynik.
88-> 85: Usunięty a, bi c.
(a=v[0])ajest dłuższy niż v[0]v[0].
s=(v[0]+v[1]+v[2])/2z a, b, c = 3,4,5 doprowadziłoby "345"/2=172.5" and not 6. Improved without do , B` i cchociaż.
s=(-v[0]-v[1]-v[2])/2i zmień drugą -na +. Jest to parzysta liczba warunków, więc anuluje się.
Z 4 bajtami zapisanymi przez @swish.
To zwraca dokładną odpowiedź:
Area@SSSTriangle@
Przykład
Area@SSSTriangle[2,3,4]
Aby zwrócić odpowiedź w postaci dziesiętnej, wymagane są dwa dodatkowe bajty.
N@Area@SSSTriangle[2,3,4]
2,90474
Area@*SSSTriangle
readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
Bardzo prosta implementacja formuły Herona. Przykładowy przebieg:
Prelude> readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
[2,3,4]
2.9047375096555625
Prelude>
Zauważ, że akceptuje dowolne dane liczbowe, nie tylko liczby całkowite. A jeśli dane wejściowe są już w l, rozwiązanie musi mieć tylko 36 znaków, a jeśli nie jesteśmy zainteresowani wydrukowaniem odpowiedzi, rozwiązanie musi mieć tylko 30 znaków. Co więcej, jeśli możemy pozwolić sobie na zmianę formatu wejściowego, możemy usunąć jeszcze 3 znaki. Więc jeśli nasze dane wejściowe wyglądają na [2,3,4,0,0] i są już w l, możemy uzyskać odpowiedź tylko:
sqrt$product$map(sum l/2-)l
Przykładowy przebieg:
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]);
Wykorzystanie:
php triangle.php
2,3,4
Wynik: 2.9047375096556
Nie sądzę, że mogę to skrócić? Nadal jestem nowy w golfa. Daj mi znać, jeśli coś przeoczyłem.
Dzięki Primo za uratowanie mnie 1 bajt, lol.
($s-$c[2])można zastąpić $s-=$c[2]jednym bajtem, ale to wszystko, co widzę.
s=(eval('abc '.split('').join('=prompt()|0;'))+a+b)/2;Math.sqrt(s*(s-a)*(s-b)*(s-c))
Inne rozwiązanie JavaScript oparte na formule Herona, ale próbujące innego podejścia do ładowania zmiennych. Musi być uruchamiany z konsoli. Każda strona jest wprowadzana w osobnym monicie.
EDYCJA : Użyj wartości zwracanej, evalaby zapisać 2 znaki. Beats @tomsmeding, wahoo! :)
½*Nx
NmnU ×*U q
Zaoszczędzono 2 bajty dzięki ETH wskazującemu nadmiarową nową linię i kilka alternatywnych sposobów na zmniejszenie tablicy.
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))}
Podaj boki jako argument.
Dla danych wejściowych 2 3 4wartością sjest (2+3+4)/2.ciąg znaków. Podwójna ocena FTW.
4⁻¹√(sum(Ansprod(sum(Ans)-2Ans
Zaczynając od rutynowej formuły Herona napisanej przez Kennetha Hammonda (Weregoose) , grałem w golfa o dwa bajty. Zauważ, że TI-BASIC jest tokenizowany, a każdy token, jak Ansiprod( , ma jeden lub dwa bajty w pamięci kalkulatora.
Dane wejściowe Ansnp. W formularzu {a,b,c}:[program name].
Wyjaśniono:
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
Kolejna implementacja formuły Hero.
#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;
}
╝0∞♀»♦▓y╩╪
Działa trzykrotnie liczb zmiennoprzecinkowych. Wykorzystuje formułę Herona