삼각형 영역 측면


17

삼각형의 세면이 주어지면이 삼각형의 인쇄 영역이 나타납니다.

테스트 사례 :

에서 : 2,3,4

아웃 : 2.90473750965556

에서 : 3,4,5

아웃 : 6

3면 a, b, c가 항상 a> 0, b> 0, c> 0, a + b> c, b + c> a, c + a> b라고 가정합니다.

답변:


6

J, 23 19 자

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

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

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

입력이 17 문자 버전 인 경우 i:4%~%:*/(+/,+/-+:)i

원본 23 문자 버전 : (%:@(+/**/@(+/-+:))%4:)



6

파이썬 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

매스 매 티카 23

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

따로 언급하십시오. 우리는 (보통) Mma 코드를 함수로 제공하려고 노력합니다. 예를 들어 귀하의 경우Sqrt[Tr@#*Times@@(Tr@#-2#)]/4&
Dr. belisarius

2
28 문자, 함수 (Tr@#Times@@(Tr@#-2#))^.5/4&또는 27 변수를 사용하여
박사 belisarius

@belisarius 제안 해 주셔서 감사합니다.
chyanog

5

파이썬 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

나는 파이썬에 굉장히 익숙하지 않지만 왜 2 행이 *.5아닌 /2?
jdstankosky

@jdstankosky 파이썬의 나누기 연산자는 기본적으로 정수 나누기이므로, 합 a+b+c이 홀수이면 결과가 잘못됩니다. 달리 명시하지 않는 한 (Perl 제출이 Perl 6이 아닌 5.10+로 가정되는 것처럼) 대부분의 골프 제출은 Python 2.7로 가정되지만 이것은 Python 3에서 변경되었습니다.
primo April

3
당신은 할 수 단지 대신 "파이썬"의 "파이썬 3"을 말한다.
Joe Z.

1
@JoeZ. 아니. 이것은 파이썬 2입니다; Python 3에서 input ()은 문자열을 반환 하여이 솔루션을 중단합니다.
Khuldraeseth na'Barya

4

GolfScript, 38 자

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

질문에 달리 지정하지 않았으므로 정수 길이에서만 작동하도록 선택했습니다. 측면으로 구분 된 STDIN에면이 제공되어야합니다.

예:

> 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

헤론의 공식을 사용하지만 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

자바 스크립트, 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 lol에서 간단한 문제의 극복 할 수 없음을 보여줍니다

참고 : 결과를 보려면 콘솔에서 실행하십시오.

88-> 85 : 제거 a, bc.


1
한 번만 2로 나누어 비트를 저장할 수 있습니다. 그리고 변수에 할당하여 실제로 아무것도 얻지 못합니다 : (a=v[0])ais than than v[0]v[0].
피터 테일러

I 같이, 2 단 하나의 시간으로 나눈 경우 s=(v[0]+v[1]+v[2])/2, B와 C는 = 3,4,5이 초래 b`하고 있지만. "345"/2=172.5" and not 6. Improved without , 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


10 진수 형식으로 답을 리턴하려면 두 개의 추가 바이트가 필요합니다.

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

2.90474


컴포지션 면도 몇 바이트Area@*SSSTriangle
Swish

@swish 감사합니다, 대단히 감사합니다.
DavidC

1

하스켈 : 51 (27) 자

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>

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

나는 그것을 더 짧게 만들 수 있다고 생각하지 않습니까? 나는 아직도 골프를 처음 접합니다. 내가 무언가를 간과하면 누구든지 알려주십시오.

1 바이트를 절약 해 준 Primo에게 감사합니다. lol.


1
마지막 ($s-$c[2])$s-=$c[2]1 바이트 로 대체 될 수 있지만 이것이 내가 볼 수있는 전부입니다.
primo

@primo 감사합니다.
jdstankosky

1

자바 스크립트 (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

엑셀, 42 바이트

헤론의 공식에 근거하여 골프 대 고등학교 대수학.

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

Ungolfed / Unalgebra'ed

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

1

Japt , 17 16 15 바이트

½*Nx
NmnU ×*U q

그것을 테스트

ETH 가 중복 줄 바꿈을 지적하고 어레이를 줄이는 몇 가지 다른 방법으로 2 바이트 를 절약했습니다.


나도 두 번째 라인이 중 하나를 사용할 수 있다고 생각 : NmnU ×*U q, NmnU r*U q,Np0 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.


proc, 그것은 단지 81 바이트로 확장됩니다 : tio.run/##NYo7CoAwEAV7T/…
sergiol

1

Julia 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 루틴에서 시작하여 2 바이트를 뛰었습니다. 참고 TI-BASIC 같이, 토큰 화하고, 각 토큰 것을 Ansprod( , 계산기의 메모리에 하나 또는 두 개의 바이트입니다.

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

나는 이것이 당신의 일이 아니기 때문에 이것을 커뮤니티 위키로 변환했습니다. 우리는 이것에 대한 확실한 합의를 가지고 있지 않지만, 당신이 내 결정에 동의하지 않는다면 여기 에 무게를 두십시오.
마틴 엔더



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

어떤 오류 PLZ 나에게 제안하는 경우 안녕 iam 초보자 프로그래밍.
sharath

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.