三角形区域侧面侧面侧面


17

给定一个三角形的三个边,请打印此三角形的区域。

测试用例:

在: 2,3,4

出: 2.90473750965556

在: 3,4,5

出: 6

假设三个边a,b,c总是a> 0,b> 0,c> 0,a + b> c,b + c> a,c + a> b。

Answers:


6

J,23 19个字符

   (4%~2%:[:*/+/-0,+:)

   (4%~2%:[:*/+/-0,+:) 2 3 4
2.90474

   (4%~2%:[:*/+/-0,+:) 3,4,5
6

如果输入是17字符版本 i4%~%:*/(+/,+/-+:)i

原始的23个字符的版本: (%:@(+/**/@(+/-+:))%4:)


7

杀伤人员地雷21 20

通过←⎕进行屏幕输入

(×/(+/t÷2)-0,t←⎕)*.5

6

Python 2,53

t=input()
s=a=sum(t)/2.
for x in t:a*=s-x
print a**.5

输入: 2,3,4

输出: 2.90473750966


3
我浪费了很多时间来想出一个更好的解决方案。我坚信这是最好的
jamylak

2
@jamylak,你和我都;)
primo

6

Mathematica 23

√Times@@(+##/2-{0,##})&

撇开评论。我们(通常)尝试在此处提供Mma代码作为函数。例如,您的案例Sqrt[Tr@#*Times@@(Tr@#-2#)]/4&
belisarius博士2013年

2
28个字符(作为函数(Tr@#Times@@(Tr@#-2#))^.5/4&)或27个使用变量
belisarius博士2013年

@belisarius感谢您的建议。
chyanog

5

Python 57字节

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

我对python并不是很熟悉,但是为什么是第2行*.5而不是/2
jdstankosky

@jdstankosky Python中的除法运算符默认情况下为整数除法,因此,如果的总和a+b+c为奇数,则结果将是错误的。这确实在Python 3中发生了变化,尽管除非另有说明,否则大多数高尔夫提交都假定为Python 2.7(就像Perl提交被假定为5.10+,而不是Perl 6)。
primo

3
可以只说“ Python 3”而不是“ Python”。
Joe Z.

1
@JoeZ。不。这是Python 2;在Python 3中,input()返回一个字符串,破坏了此解决方案。
库尔德拉西斯·纳巴里亚

4

GolfScript,38个字符

~].~++:d\{2*d\-*}/'"#{'\+'**0.5/4}"'+~

由于该问题没有特别说明,因此我选择仅在整数长度上工作。侧面必须在STD​​IN上用空格隔开。

例:

> 2 3 4
2.9047375096555625

3

K,23

{sqrt s**/(s:.5*+/x)-x}

k){sqrt s**/(s:.5*+/x)-x} 2 3 4
2.904738

3

APL,23 20个字符

{(×/(+/⍵÷2)-0,⍵)*÷2} 2 3 4

例:

> {(×/(+/⍵÷2)-0,⍵)*÷2} 2 3 4
2.90474

3

R:48 43个字符

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您使用向量调用函数。
flodel

@flodel谢谢!我没想到省略号,那很好。
plannapus

2

Javascript,88 85

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:删除abc


1
您可以通过仅将2除以节省一点时间。通过分配变量,您实际上并不会获得任何收益:(a=v[0])a比更长v[0]v[0]
彼得·泰勒

如果仅将我除以2,如s=(v[0]+v[1]+v[2])/2a,b,c = 3,4,5,则会"345"/2=172.5" and not 6. Improved without 得到, b`,c尽管如此。
tomsmeding

啊,JavaScript很棒的类型系统。好的,s=(-v[0]-v[1]-v[2])/2将另一个更改-+。这是偶数个术语,因此被取消了。
彼得·泰勒

2

Mathematica 20 16或22 18字节

@swish保存了4个字节。

这将返回一个确切的答案:

Area@SSSTriangle@

Area@SSSTriangle[2,3,4]

image


要以十进制形式返回答案,需要另外两个字节。

N@Area@SSSTriangle[2,3,4]

2.90474


组成刮胡子几个字节Area@*SSSTriangle

@swish谢谢,非常感谢。
DavidC

1

Haskell:51(27)个字符

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>

1

PHP,78 77

<?=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个字节,大声笑。


1
最终的($s-$c[2])可以替换$s-=$c[2]为一个字节,但这就是我所能看到的。
primo

@primo谢谢,伙计!
jdstankosky 2013年

1

JavaScript(84 86

s=(eval('abc '.split('').join('=prompt()|0;'))+a+b)/2;Math.sqrt(s*(s-a)*(s-b)*(s-c))

另一个基于Heron公式的JavaScript解决方案,但是尝试了另一种加载变量的方法。需要从控制台运行。每一面都在单独的提示中输入。

编辑:利用返回值eval保存2个字符。击败@tomsmeding,哇!:)


1

Excel,42个字节

根据苍鹭的公式,高中代数开始打高尔夫。

=SQRT(((A1+B1)^2-C1^2)*(C1^2-(A1-B1)^2))/4

非高尔夫/非代数

=SQRT((A1+B1+C1)/2*(((A1+B1+C1)/2)-A1)*(((A1+B1+C1)/2)-B1)*(((A1+B1+C1)/2)-C1))

1

Japt17 16 15字节

½*Nx
NmnU ×*U q

测试一下

由于ETH指出了冗余的换行符和一些减少数组的替代方法,因此节省了2个字节。


我想你可以使用任何的这些第二行,得:NmnU ×*U qNmnU r*U qNp0 mnU ×q
ETHproductions

1

Tcl,74个字符。

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。


作为a proc,它仅扩展到81个字节: tio.run
##

1

朱莉娅0.6.0,48字节

苍鹭的基本公式是:

f(a,b,c)=(p=(a+b+c)/2;sqrt(p*(p-a)*(p-b)*(p-c)))

1

TI-BASIC,14 12字节

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))

我将其转换为社区Wiki,因为它不是您自己的工作。我们对此没有真正的共识,但是如果您不同意我的决定,请随时在这里发表意见。
马丁·恩德



0
#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;
}

嗨,我是编程初学者,如果有任何错误请提示我。
2013年

欢迎来到CodeGolf。您应该首先验证程序是否正常工作,并以某种方式输出结果。这是一些简单的错误。
ugoren




0

APL(NARS),16个字符,32个字节

{√×/(+/⍵÷2)-0,⍵}

如果a,b,c是三角形的边,则必须将Erone公式中心化

p   =(a+b+c)/2 
Area=√p*(p-a)(p-b)(p-c)

到APL语言...测试

  f←{√×/(+/⍵÷2)-0,⍵}
  f 2 3 4
2.90473751
  f 3 4 5
6
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.