내 삼각형이 맞습니까?


47

a, b, c삼각형의 세 변의 길이를 고려 하여 삼각형이 직각인지 (즉, 한 각도가 90 도인 경우) 말하십시오.

입력

순서에 상관없이 3 개의 양의 정수 값

산출

어느 특정 참 출력 ( true, 1, yes...) 또는 특정의 오류 출력 ( false, 0, no...)

5, 3, 4        --> yes
3, 5, 4        --> yes
12, 37, 35     --> yes
21, 38, 50     --> no
210, 308, 250  --> no

규칙

  • 입력 및 출력은 편리한 형식으로 제공 될 수 있습니다 .
  • 제출시 true 및 false 값을 명시하십시오.
  • 음수 값 또는 유효하지 않은 에지 트리플 을 처리 할 필요가 없습니다.
  • 전체 프로그램 또는 기능이 허용됩니다. 함수 인 경우 출력하지 않고 출력을 반환 할 수 있습니다.
  • 가능하면 다른 사람들이 귀하의 코드를 시험해 볼 수 있도록 온라인 테스트 환경에 대한 링크를 포함하십시오!
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

1
음수 값이나 유효하지 않은 엣지 트리플을 처리해야합니까?
user202729

2
매우 관련이 있습니다. 나는 그것의 dup 여부를 결정하기 위해 나머지 지역 사회에 맡길 것입니다.
Digital Trauma

2
길이 대신 좌표를 사용하면 도전이 크게 바뀐다 고 생각합니다.
Luis Mendo

8
21 + 5 <3821, 38, 5 이므로 길이가있는 삼각형은 없습니다 . 이것은 우리가 다루어야 할 의도적 인 병리학적인 사례입니까?
Kevin

1
@Kevin 아니오이 사건을 처리하지 않아도됩니다. User202729 님은 이미이 질문을했습니다 :)
mdahmoune

답변:


37

젤리 , 5 바이트

²µSHe

온라인으로 사용해보십시오!

기술 노트 : 바이트는 젤리 코드 페이지에서 계산됩니다.

설명:

²µSHe  Main link.
²      Square each number.
 µ     With the new list,
  S    calculate its sum,
   H   and halve it.
    e  Check if the result exists in the new list (squared input)

문제는 세 개의 숫자가 주어지고 a, b, c순열이 있는지 묻는 것과 같습니다 a² + b² = c². 이것은 (a² + b² + c²) ÷ 2중 하나 인지 여부에 해당 a², b² or c²하므로 프로그램에서 확인합니다.


음 ... 젤리
Félix Gagnon-Grenier

1
기술 노트 : UTF-8에서는 기호 ²µ2 바이트가 각각 2 바이트이므로 코드는 실제로 5가 아닌 7 바이트입니다.
Charlie

2
@Charlie 답변을 명확하게하기 위해 편집했습니다.
user202729

20

파이썬 2 , 37 바이트

a,b,c=sorted(input())
1/(a*a+b*b-c*c)

온라인으로 사용해보십시오!

FlipTack 덕분에 -2 입니다. Craig Gidney
에게 -1 감사합니다 .

종료 코드를 통해 출력합니다 ( 0= false, 1= true).


바. 똑같은 답을 얻었습니다. 여러 테스트 사례를 허용하도록 테스트 스위트를 수정할 수 있습니다. 여기 참조
mbomb007

@ mbomb007 exec(code)hmmm exec (code)대신에 왜 exec code? : D
;-p

하하,이 대답은 어떻게 xnor의 짧은 것보다 두 배나 높은 투표율을 가지나요? 어쩌면 사람들은 그것의 달콤한
단순함을 좋아할

1
@FlipTack ¯_ (ツ) _ / ¯ (또한 xnor는 Python 2에 없습니다)
Outgolfer Erik

보일러 플레이트가 골프를 치는 부분이 아니기 때문에 @EriktheOutgolfer. 파이썬 2 나 3에서 작동하도록 만들었습니다.
mbomb007

17

자바 8, 44 바이트

(a,b,c)->(a*=a)+(b*=b)==(c*=c)|a+c==b|b+c==a

설명:

여기에서 시도하십시오.

(a,b,c)->                // Method with three integer parameters and boolean return-type
  (a*=a)+(b*=b)==(c*=c)  //  Return if `a*a + b*b == c*c`
  |a+c==b                //  or `a*a + c*c == b*b`
  |b+c==a                //  or `b*b + c*c == a*a`
                         // End of method (implicit / single-line return-statement)

에 괄호없이 작동합니까 (c*=c)? 에 대한 *=우선 순위가있을 수 있으며 ==2 바이트를 절약 할 수 있습니다.
corsiKa

@corsiKa 나는 그것이 다른 길을 두려워합니다. ==보다 우선합니다 *=. =, +=, *=, 유사한 과제 실제로이 자바 사업자에서 가장 낮은 우선 순위를 .
Kevin Cruijssen

더 짧은 것을 찾을 수 없습니다 ... 나는 a성공하지 않고 최대 값을 할당하기 위해 변수를 바꾸려고했습니다 . 글쎄, 난 할 수 있지만 약 65 자 ...
Olivier Grégoire

12

자바 스크립트 (ES6), 43 41 40 바이트

@Neil 덕분에 1 바이트를 절약하고 버그를 수정했습니다.

입력을 3 개의 정수 배열로 취합니다. 반환 true을위한이 직각과 false달리.

a=>a.some(n=>Math.hypot(...a,...a)==n*2)


원본 버전, 44 바이트

입력을 3 개의 정수로 취합니다. 반환 1을위한이 직각과 0달리.

(a,b,c)=>(a*=a)+(b*=b)==(c*=c)|a+c==b|b+c==a

테스트 사례


우리는 똑같은 답변을 내놓았다처럼 보이는합니다 (을 제외 =>하고 ->자바 스크립트와 자바 (8)의 차이). ;) 나에게서 명백한 +1.
Kevin Cruijssen

>>1안전하지 않은 경우에 대해 true를 반환합니다 [1, 1, 1].
Neil

2
어때요 Math.hypot(...a,...a)==n*2?
Neil

@Neil 아주 좋은 수정 :)
Arnauld

2
~=
@Neil


7

삼각형 , 57 바이트

나는이 언어에서 아직 아무것도 보지 못했고 그것을 시도하는 것이 적절 해 보였다. 처음에 머리를 가져 가야했기 때문에 조금 시간이 걸렸으며 이것이 더 골프를 칠 수 있다고 생각합니다.

,$\:$:*/%*$"`=P:pp.0"*>/>-`:S!>/U+<U"g+..>p`S:U/U"p`!g<>/

온라인으로 사용해보십시오!

이것은 다음 삼각형으로 확장됩니다.

          ,
         $ \
        : $ :
       * / % *
      $ " ` = P
     : p p . 0 "
    * > / > - ` :
   S ! > / U + < U
  " g + . . > p ` S
 : U / U " p ` ! g <
> /

길은 매우 복잡하지만, 내가 한 일을 시도하고 설명 할 것입니다. 방향 포인터를 건너 뛸 것입니다. 대부분의 코드는 스택 조작입니다.

  • $:* 첫 번째 입력을 제곱합니다.
  • $:* 두 번째 입력을 제곱합니다.
  • S":Ug! 두 번째 값이 첫 번째 값보다 큰지 테스트하십시오.
    • true p" 첫 번째와 교환하십시오.
    • 거짓 p 아무것도하지 마십시오.
  • $:* 세 번째 입력을 제곱합니다.
  • P":USg! 세 번째 값이 이전 값보다 큰지 테스트합니다.
    • 진정한 p+U- 합 현재 스택 저장된 제 3 값을 빼앗아
    • 최소값을 p"U+- 합산하고 3을 저장하고 최대 값을 뺀 값
  • 0=% 평등을 0으로 테스트하고 결과를 출력합니다.

6

하스켈 ( 33 32 31 바이트)

(\x->(sum x)/2`elem`x).map(^2)

원본 버전 :

(\x->2*maximum x==sum x).map(^2)

익명의 기능. [a, b, c] 형식의 목록을 가져옵니다. True 또는 False를 출력합니다.

첫 번째 버전은 제곱의 합이 최대 제곱의 두 배인지 확인했습니다.

둘째, 약간 더 나은 버전은 제곱합의 절반이 제곱 목록의 요소인지 확인합니다.

편집 : 실수로 뉴 라인을 계산했습니다 .H.PWiz


1
사이트에 오신 것을 환영합니다! 이 대답은 32 바이트에 불과합니다. 추가 줄 바꿈을 세었습니까?
H.PWiz

3
당신은 좀 더 바이트를 저장하는 기능 모나드를 사용할 수 있습니다 여기에
H.PWiz

또한 괄호를 sum버릴 수 있습니다. 좋은 해결책!
자랑스런 Haskeller

6

펄 6 , 24 바이트

{(*²+*²==*²)(|.sort)}

온라인으로 사용해보십시오!

*²+*²==*²첫 두 인수의 제곱의 합이 세 번째 인수의 제곱과 같으면 true를 반환하는 익명 함수입니다. 정렬 된 입력 목록을이 함수에 전달하고을 사용하여 인수 목록으로 병합합니다 |.


6

R , 31 26 30 바이트

cat(sum(a<-scan()^2)/max(a)==2)

나는 이것을 좋아하지 않지만 더 짧습니다. 제곱을 합하고 가장 큰 제곱으로 나눕니다. 진실이라면 2.

이전 버전 (cat 및 @Guiseppe의 팁으로 수정)

cat(!sort(scan())^2%*%c(1,1,-1))

마지막 항목이 무효화 된 정렬 된 입력의 합계를 수행하고 !그렇지 않은 항목을 반환합니다 .

온라인으로 사용해보십시오!


이전 버전의 경우 !sort(scan())^2%*%c(1,1,-1)27 바이트입니다. 하지만 난 여전히 당신이 필요하다고 생각합니다 cat.
Giuseppe

건배 @Guiseppe, 고양이를 잊어 버렸습니다. REPL에 관한 규칙은 저를 성가 시게합니다.
MickyT

@Giuseppe 또한 행렬 곱셈과 함께 멋진 트위스트. 나는 결코 그것을 생각해 냈을 것입니다.
MickyT

6

Brain-Flak , 68 바이트

({({({})({}[()])}{}<>)<>})<>({<(({}){}<>[({})])>(){[()](<{}>)}{}<>})

온라인으로 사용해보십시오!

user202729의 답변에 관측치를 사용합니다.

 {                      }      for each input number
   {({})({}[()])}{}            compute the square
  (                <>)<>       push onto second stack
(                        )     push sum of squares onto first stack
                          <>   move to second stack

 {                                    }    for each square
   (({}){}<>[({})])                        compute 2 * this square - sum of squares
  <                >(){[()](<{}>)}{}<>     evaluate loop iteration as 1 iff equal
(                                      )   push 1 if any squares matched, 0 otherwise


4

MATL , 7 바이트

SU&0)s=

온라인으로 사용해보십시오!

설명

입력을 고려하십시오 [12, 37, 35].

S     % Implicit input. Sort
      % [12, 35, 37]
U     % Square each entry
      % [144, 1225, 1369]
&0)   % Push last entry and remaining entries
      % STACK: 1369, [144, 1225]
s     % Sum of array
      % STACK: 1369, 1369
=     % Isequal? Implicit display
      % STACK: 1

4

파이썬 2 , 43 바이트

lambda a,b,c:(a*a+b*b+c*c)/2in(a*a,b*b,c*c)

온라인으로 사용해보십시오!

파이썬 2 , 79 70 68 62 바이트

lambda*l:any(A*A+B*B==C*C for A,B,C in zip(l,l[1:]+l,l[2:]+l))

온라인으로 사용해보십시오!


입력을 정수로 제한하도록 문제가 업데이트되었습니다.
Martin Ender


14
A*A더 짧은 ...
Socratic Phoenix

68 바이트 tio.run/…
mdahmoune

@mdahmoune 67 바이트 ; 진실 값의 의미를 뒤집고 -대신 사용 합니다 ==.
Jonathan Frech

4

C,  68  54 바이트

사용 user202729의 솔루션을 .

f(a,b,c){return!((a*=a)+(b*=b)-(c*=c)&&a-b+c&&a-b-c);}

14 바이트 골프를위한 @Christoph에게 감사합니다!

온라인으로 사용해보십시오!

C, 85 바이트

#define C(a,b,c)if(a*a+b*b==c*c)return 1;
f(a,b,c){C(a,b,c)C(b,c,a)C(c,a,b)return 0;}

온라인으로 사용해보십시오!


1매개 변수에 대한 출력 1, 1, 1이 잘못되었습니다 ...
Neil

@Neil 이제 수정되었습니다.
Steadybox

int를 사용하도록 질문이 업데이트되었습니다. 일부 바이트를 절약 할 수 있습니다.
corsiKa

f(a,b,c){a=!((a*=a)+(b*=b)-(c*=c)&&a-b+c&&a-b-c);}
Christoph


4

J, 10 바이트

FrownyFrog 덕분에 -6 바이트

=`+/@\:~*:

원래 답변

(+/@}:={:)@/:~*:

/:사각형을 정렬 한 *:다음 처음 두 개의 합 +/@}:이 마지막과 같은지 확인하십시오.{:

온라인으로 사용해보십시오!


그것은 끔찍하게 지독한 영리합니다
Jonah

4

삼각 ,  49  31 바이트

...)...
..IEO..
.M)2s^.
}Re+=..

온라인으로 사용해보십시오!

설명

모든 삼각 프로그램에는 삼각 패딩이 있어야합니다. 즉, 프로그램 하단에서 계산 된 i 번째 라인은 각면에 i-1 도트 ( .) 로 채워 져야합니다 . 점 삼각형을 대칭적이고 미학적으로 유쾌하게 유지하려면 각 줄은 2L-1 자로 구성되어야합니다 . 여기서 L 은 프로그램의 줄 수입니다. 필요한 패딩을 구성하는 문자를 제거하는 방법은 다음과 같습니다.

)IEOM)2s^}Re+=     Full program. Input: STDIN, Output: STDOUT, either 1 or 0.
)                  Pushes a zero onto the stack.
 IE                Evaluates the input at that index.
   O               Sorts the ToS (Top of the Stack).
    M)2s^}         Runs the block )2s^ on a separate stack, thus squaring each.
          R        Reverse.
           e       Dump the contents separately onto the stack.
            +      Add the top two items.
             =     Check if their sum is equal to the other entry on the stack (c^2).

삼각형이 삼각형으로 직각인지 확인하는 중 ...



3

JavaScript 34 바이트 (D = 제외)

D=(d,[a,b,c]=d.sort())=>a*a+b*b==c*c

console.log(D([5, 3, 4       ])== true)
console.log(D([3, 5, 4       ])== true)
console.log(D([12, 37, 35    ])== true)
console.log(D([21, 38, 5     ])== false)
console.log(D([210, 308, 15  ])== false)


나는 a=>a.sort()[0]**2+a[1]**2==a[2]**2ES6 에서 34에 비슷한 대답을했다 . @DanielIndie
WallyWest 님

1
불행히도 sort()콜백이 제공되지 않으면 사전 식 순서를 사용하여 예를 들어이 코드가 실패하게합니다 [10,6,8].
Arnauld

3

RProgN 2 , 10 바이트

§²2^r]‘\+e

설명

§²2^r]‘\+e
§           # Sort the input list
 ²2^r       # Square each element in the list.
     ]      # Duplicate it on the reg stack.
      ‘     # Pop the top (largest) element off it
       \+   # Swap it, sum the rest of the list.
         e  # Are they equal?

온라인으로 사용해보십시오!


왜 목록을 복제합니까?
mdahmoune

@mdahmoune RProgN2는 요소를 튀어 나올 때 스택에 원래 목록을 유지하지 않지만 스택은 참조이므로 스택의 합계 부분을 수행하려면 스택을 먼저 복제해야합니다.
ATaco

Thanx upvote;)
mdahmoune

3

라켓 , 64 60 바이트

(λ(a b c)(=(+(* a a)(* b b)(* c c))(*(expt(max a b c)2)2)))

온라인으로 사용해보십시오!

작동 원리

테스트하는 경우 a^2 + b^2 + c^2IS는 두 배의 가장 큰 동일 a^2, b^2그리고 c^2.

#t직각 삼각형과 #f다른 모든 입력에 대해 반환 합니다 .


  • @xnor의 사용 제안 덕분에 -4 바이트 expt.

멋진;)하지만 (define fun코드의 일부가되어야 생각 합니다 ...
mdahmoune

감사합니다! 순수한 함수가 응답으로 허용된다고 말하는 것이 일반적이라고 생각합니다. (define fun ...)TIO에 단지 편의를위한 것입니다 : 우리는 똑같이뿐만 아니라이 기능을 사용할 수있는 (... 3 4 5)...기능입니다. (그래서 우리의 헤더 가질 수 (print (와의 바닥 글 3 4 5))원하는 경우입니다.)
미샤 라브 로프에게

(그러나 이것은 첫 번째 라켓 제출 중 하나이므로 라켓 관련 규칙이 무엇인지 명확하지 않습니다. 라켓을 사용하는 과거 솔루션 중 일부 #lang racket는 코드에 포함 되어 있습니다. 일부는 그렇지 않았습니다.)
Misha Lavrov

1
라켓은 너무 단단 (max a b c)해서 let묶는 것보다 반복하는 것이 더 짧습니다 . 에 대한 인수로 바인딩하는 것이 더 짧을 것이라고 생각하지 않습니다 λ. 또는 지수가 내장되어 있지 않습니까?
xnor

2
@MishaLavrov 그럼 (*(expt(max a b c)2)2)어때요?
xnor


3

루비, 31 바이트

->a{a,b,c=*a.sort;a*a+b*b==c*c}

3 개의 정수 목록으로 입력을받습니다. 다른 솔루션의 아이디어를 사용합니다.


방금 게시 한 답변이 귀하의 답변과 거의 동일하다는 것을 알았습니다. 나는 당신을 복사하지 않겠다고 약속합니다 (실제로는 "답변 게시"상자에 잠시 앉아 있었지만).
iamnotmaynard

@iamnotmaynard 그것은 거의 같은 것입니다. 이것은 재미있는 우연의 일치 롤이었다. 알려 주셔서 감사합니다
dkudriavtsev

가능하면 다른 사람들이 귀하의 코드를 시험해 볼 수 있도록 온라인 테스트 환경에 대한 링크를 포함하십시오!
mdahmoune

3

줄리아 0.6 , 16 바이트

!x=xx2x.*x

온라인으로 사용해보십시오!

작동 원리

x = [a, b, c] 이라고하자 .

x⋅xx 와 그 자체 의 내적 이므로 a² + b² + c² 입니다.

2x.*x2xx 의 요소 별 곱 이므로 [2a², 2b², 2c²] 입니다.

마지막으로 정수 a² + b² + c² 가 벡터 [2a², 2b², 2c²]에 속 하는지 테스트합니다. 이는
a² + b² + c² = 2a² 또는 a² + b² + c² = 2b² 또는 a² + b² + c² = 2c² 이는
b² + c² = a² 또는 a² + c² = b² 또는 a² + b² = c² 인 경우에 해당 됩니다.



3

TI 기본, 13 11 10 바이트

max(Ans=R►Pr(min(Ans),median(Ans

이제 입력 순서에 관계없이 작동하며 짧아집니다. @MishaLavrov의 또 다른 -1 감사


가능하면 다른 사람들이 귀하의 코드를 시험해 볼 수 있도록 온라인 테스트 환경에 대한 링크를 포함하십시오!
mdahmoune

이 단지 검출 오른쪽 삼각형을 분류 : 입력의 A=5, B=4, C=3제대로 처리되지 않을 것이다.
Misha Lavrov

@MishaLavrov이를 지적 해 주셔서 감사합니다. 실제로 목록으로 취급하는 것이 더 짧습니다. 이제 어떤 순서로든 입력에 작동합니다.
Timtech

우리가 하나 떨어져두면 ), 다음 max(Ans=R►Pr(min(Ans),median(Ans(우리가 여기서 뭘하고있는 계산이 다른 불구하고)도 유효하며 한 바이트 짧습니다.
Misha Lavrov

@MishaLavrov 흥미 롭습니다. 무슨 말인지 알겠습니다. 나는 모든 음이 아닌 입력에 대해 표현식이 동일하다고 생각합니다.
Timtech

3

CJam, 9

q~$W%~mh=

온라인으로 사용해보십시오

설명:

q~      read and evaluate the input (given as an array)
$W%     sort and reverse the array
~       dump the array on the stack
mh      get the hypotenuse of a right triangle with the given 2 short sides
=       compare with the longer side

몇 가지 설명;)?
mdahmoune

@mdahmoune 여기 당신은
aditsu

댕 그 언어를 쓰지 않았습니까? 공평하지 않은 것 같습니다. (농담)
케인

3

Pari / GP , 29 24 바이트

f(v)=v~==2*vecmax(v)^2

온라인으로 사용해보십시오!

에서 (으) norml2(v)로의 명백한 변경으로 5 바이트를 절약 했습니다 v*v~.

다른 답변에서 영감을 얻었습니다.

여기 에는 세 개의 좌표 v가있는 행 벡터 또는 열 벡터 가 있어야합니다 .

사용 예 : f([3,4,5])

물론, 당신은 예를 들어 합리적인 측면 길이를 무료로 얻습니다 f([29/6, 10/3, 7/2]).

f(v)=부분을 계산하지 않으면 19 바이트입니다. 첫 번째 부분도 쓸 수 있습니다 v->(총 22 바이트).

설명 : 세 가지 좌표가있는 경우 v입니다 x, y그리고 z,의 다음 제품 v과 그 전치는 v~스칼라를 제공 x^2+y^2+^z^2, 우리는 그 좌표의 최대 두 배의 제곱에 동일한 경우는 확인해야합니다 x, y, z.

추가 : 입력 벡터에 네 개의 좌표가있는 경우 피타고라스 쿼드 러플에f 대해 동일한 테스트가 수행 됩니다.


가능하면 다른 사람들이 귀하의 코드를 시험해 볼 수 있도록 온라인 테스트 환경에 대한 링크를 포함하십시오!
mdahmoune

@mdahmoune tio.run링크를 사용할 수 있습니다 . 그러나 PARI / GP를 로컬로 설치하는 것이 훨씬 좋습니다.
Jeppe Stig Nielsen

3

MS Excel, 49 바이트

[A1 : C1] 범위에서 입력을 받고 호출 셀로 출력하는 익명 워크 시트 함수입니다.

=OR(A1^2+B1^2=C1^2,B1^2+C1^2=A1^2,A1^2+C1^2=B1^2)

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