Answers:
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
?
a+b+c
为奇数,则结果将是错误的。这确实在Python 3中发生了变化,尽管除非另有说明,否则大多数高尔夫提交都假定为Python 2.7(就像Perl提交被假定为5.10+,而不是Perl 6)。
f=function(...)prod(sum(...)/2-c(0,...))^.5
也使用Heron公式,但要利用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大声笑中简单问题的不可解决性
注意:从控制台运行以查看结果。
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
将另一个更改-
为+
。这是偶数个术语,因此被取消了。
readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
Heron公式的非常简单的实现。示例运行:
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]
为一个字节,但这就是我所能看到的。
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。
4⁻¹√(sum(Ansprod(sum(Ans)-2Ans
从肯尼思·哈蒙德(Kenneth Hammond)(Weregoose)编写的Heron's Formula例程开始,我打了两个字节。请注意,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))