Yanıtlar:
t=input()
s=a=sum(t)/2.
for x in t:a*=s-x
print a**.5
Giriş: 2,3,4
Çıktı: 2.90473750966
Mathematica 23
√Times@@(+##/2-{0,##})&
Sqrt[Tr@#*Times@@(Tr@#-2#)]/4&
(Tr@#Times@@(Tr@#-2#))^.5/4&veya değişken kullanan 27
a,b,c=input()
s=(a+b+c)*.5
print(s*(s-a)*(s-b)*(s-c))**.5
Heron Formülü'nü kullanarak .
Örnek kullanım:
$ echo 2,3,4 | python triangle-area.py
2.90473750966
$ echo 3,4,5 | python triangle-area.py
6.0
58 baytlık bir varyant:
a,b,c=input()
print((a+b+c)*(b+c-a)*(a+c-b)*(a+b-c))**.5/4
*.5yerine /2?
a+b+csonuç hatalı olur. Bu, Python 3'te değişti, ancak golf gönderimlerinin çoğu, aksi belirtilmedikçe Python 2.7 olarak kabul edilir (tıpkı Perl başvurularının Perl 6 değil 5.10+ olduğu varsayılır).
f=function(...)prod(sum(...)/2-c(0,...))^.5
Heron'un formülünü de kullanmak, ancak R'nin vektörleşmesinden faydalanmak.
Üç nokta fikri için @ flodel'e teşekkürler.
Kullanımı:
f(2,3,4)
[1] 2.904738
f(3,4,5)
[1] 6
function(...)prod(sum(...)/2-c(0,...))^.5. Veya function(x)prod(sum(x)/2-c(0,x))^.5fonksiyonunuzu bir vektörle çağırsanız bile .
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]))
İyi değil ama eğlenceli :) Ayrıca Heron ... JS lol basit sorunların çözülemezliğini gösterir
Not : sonucu görmek için konsoldan çalıştırın.
88-> 85: Kaldırılması a, bve c.
(a=v[0])adaha uzun v[0]v[0].
s=(v[0]+v[1]+v[2])/2, a, b gibi, c = 3,4,5 "345"/2=172.5" and not 6. Improved without bir , b` ve cbuna neden olur.
s=(-v[0]-v[1]-v[2])/2ve diğerini -değiştirin +. Eşit sayıda terim olduğundan iptal olur.
@Swish tarafından kaydedilen 4 bayt ile.
Bu kesin bir cevap verir:
Area@SSSTriangle@
Misal
Area@SSSTriangle[2,3,4]
Cevabı ondalık biçimde döndürmek için iki ek bayt gerekir.
N@Area@SSSTriangle[2,3,4]
2,90474
Area@*SSSTriangle
readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
Heron formülünün çok basit bir uygulaması. Örnek çalışma:
Prelude> readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
[2,3,4]
2.9047375096555625
Prelude>
Yalnızca tamsayıları değil, herhangi bir sayısal girişi kabul ettiğini unutmayın. Ve eğer giriş zaten l ise çözümün sadece 36 karakter uzunluğunda olması gerekiyorsa ve cevabı yazdırmak istemiyorsak, çözümün sadece 30 karakter uzunluğunda olması gerekir. Dahası, giriş biçimini değiştirmemize izin verebilirsek, 3 karakteri daha kaldırabiliriz. Yani girdimiz [2,3,4,0.0] gibi görünüyorsa ve zaten l ise, cevabımızı sadece şu şekilde alabiliriz:
sqrt$product$map(sum l/2-)l
Örnek çalışma:
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]);
kullanımı:
php triangle.php
2,3,4
Çıktı: 2.9047375096556
Daha kısa yapabileceğimi sanmıyorum? Hâlâ golf oynama konusunda yeniyim. Bir şey göz ardı edersem herkes bana haber verdi.
Beni 1 bayt kurtardığın için teşekkürler Primo, lol.
($s-$c[2])değiştirilebilir $s-=$c[2], ancak tek gördüğüm bu.
s=(eval('abc '.split('').join('=prompt()|0;'))+a+b)/2;Math.sqrt(s*(s-a)*(s-b)*(s-c))
Heron'un formülüne dayanan, ancak değişkenleri yüklemek için farklı bir yaklaşım deneyen başka bir JavaScript çözümü. Konsoldan çalıştırılması gerekiyor. Her taraf ayrı bir isteme girilir.
EDIT : eval2 karakter kaydetmek için dönüş değerini kullanın . @Tomsmeding yener, wahoo! :)
½*Nx
NmnU ×*U q
ETH , gereksiz bir yeni satıra ve diziyi azaltmanın bazı alternatif yollarına işaret ederek 2 bayt tasarruf etti.
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))}
Tarafları argüman olarak iletin.
Girişi için 2 3 4değeri solan (2+3+4)/2.dize olarak. Çift değerlendirme FTW.
proc, sadece 81 bayta uzanır: tio.run/##NYo7CoAwEAV7T/…
4⁻¹√(sum(Ansprod(sum(Ans)-2Ans
Kenneth Hammond (Weregoose) tarafından yazılan Heron'un Formula rutininden başlayarak iki bayt çıkardım. TI-BASIC simgeleþtirilmiþ ve benzeri her belirteç olduğunu Not Ansve prod(, hesap makinesinin belleğinde bir veya iki bayt.
AnsYani formda girdi{a,b,c}:[program name] .
Açıklaması:
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
Yet another implementation of Hero's formula.
#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;
}