回答:
t=input()
s=a=sum(t)/2.
for x in t:a*=s-x
print a**.5
入力: 2,3,4
出力: 2.90473750966
Mathematica 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行目/2ですか?
a+b+cが奇数の場合、結果はエラーになります。これはPython 3で変更されました。ただし、特に指定されない限り、ほとんどのゴルフの提出はPython 2.7であると想定されます(Perlの提出はPerl 6ではなく5.10+と想定されます)。
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]))
良くはありませんが楽しいです:)またHeron ...
注:コンソールから実行して結果を確認してください。
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のように2で1回だけ除算すると"345"/2=172.5" and not 6. Improved without 、, b`になりcますが。
s=(-v[0]-v[1]-v[2])/2もう一方-をに変更し+ます。項の数が偶数なので、キャンセルされます。
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
短くすることはできないと思いますか?ゴルフは初めてです。何か見落としている場合は誰にでも知らせてください。
Primoに1バイト節約してくれてありがとう、笑。
($s-$c[2])は$s-=$c[2]1バイトで置き換えることができますが、それがすべてです。
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
4⁻¹√(sum(Ansprod(sum(Ans)-2Ans
ヘロンのフォーミュラルーチンから開始 ケネス・ハモンド(Weregoose)によって書かれ 2バイトのゴルフをしました。TI-BASICがトークン化されていることを注意し、各トークンなどAnsとprod(、計算機のメモリ内の1つの又は2バイトです。
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))