세 개의 입력 정수의 차이점


30

세 개의 정수 x, y 및 z를 입력으로받는 함수 diff를 구현하십시오. 이 숫자 중 하나를 다른 숫자에서 빼면 세 번째 숫자를 제공하는지 여부를 반환해야합니다.

Test cases:
diff(5, 3, 2) yields True because 5 - 3 = 2
diff(2, 3, 5) yields True because 5 - 3 = 2
diff(2, 5, 3) yields True because 5 - 3 = 2
diff(-2, 3, 5) yields True because 3 - 5 is -2
diff(-5, -3, -2) # -5 - -2 is -3
diff(2, 3, -5) yields False
diff(10, 6, 4) yields True because 10 - 6 = 4
diff(10, 6, 3) yields False

함수의 이름을 지정할 필요는 없습니다. 위의 예제가 엄격한 지침이 아닌 기본 입력 방법을 구현할 수 있습니다.


5
이것은 합리적인 도전이지만, 파이썬이나 함수로 제한 할 필요는 없습니다. 일반적으로 이러한 제한은 참여를 제한하기 때문에 눈살을 찌푸리게합니다. 또한 몇 가지 테스트 사례를 포함해야합니다.
xnor

이봐, 나는 조금 고쳤다. 이것이 충분하기를 바랍니다!
Mir

2
더 좋아 보인다! 일부 언어에는 기능이 없으므로 기본 입력 방법 , 특히 프로그램을 허용하는 것이 좋습니다 . 그리고 함수가 다른 이름을 가지거나 이름을 갖지 못하게합니다.
xnor

첫 번째 단락과 마지막 단락이 충돌하고 있으므로 다시 한 번 확인하십시오. 함수를 작성해야합니까, 아니면 전체 프로그램이 정상입니까?
Sp3000

전체 프로그램은 괜찮습니다. 기본 입력 방법을 따르는 것을 제외하고 가능한 한 적은 제한을 적용하고 싶습니다. python3 예제는 깔끔합니다!
Mir

답변:



51

파이썬 3, 21 바이트

lambda*l:sum(l)/2in l

두 숫자가 다른 숫자를 더하면 세 숫자의 합이 다른 숫자의 두 배가되므로 합계의 절반이 목록의 요소가됩니다. 숫자가 같이 제공하지 않는 파이썬 3, 바닥 분열을 방지하기 위해 필요한 3.0것이 아니라 3.


7

ES6, 31 바이트

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

함수의 이름을 지정해야하는 경우 5 바이트를 추가하십시오 diff.

편집 : @ Alex L 덕분에 2 바이트가 절약되었습니다.


(내 생각에)|||
HyperNeutrino

@AlexL. 아 맞아 나는 부울을 반환 해야하는 것에 너무 매달렸다.
Neil

부울을 사용하더라도 |두 값이 모두 부울 인 경우에만 부울을 리턴합니다. 그래서 true | false == true,하지만 3 | 5 == 7. 동일하게 적용 &&하고 &. 부울 |과의 차이점은 다음 과 ||같습니다. |첫 번째 값과 두 번째 값을 사용하여 두 값의 OR 을 찾습니다 . ||첫 번째 가치를 취할 것입니다; true이면을 반환하고 true, 그렇지 않으면 두 번째 값을 반환합니다.
HyperNeutrino

@AlexL. true | falseJavaScript에서 1로 평가됩니다 (진실하지만 부울은 아님).
Neil

오. 죄송합니다. 실제로 JS를 사용하지 않습니다. 나는 주로 정보를 얻는 곳인 Java를 사용합니다. ;)
HyperNeutrino

4

APL, 8 5 바이트

+/∊+⍨

이것은 배열을 받아들이고 부울 (APL에서 0/1)을 반환하는 모나 딕 함수 트레인입니다. xnor의 Python 3 answer 와 동일한 알고리즘을 사용합니다 .

설명:

   +⍨  ⍝ Double the input (+⍨x is the same as x+x)
  ∊    ⍝ Test the membership of
+/     ⍝ The sum of the input

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

Dennis 덕분에 3 바이트를 절약했습니다!


4

자바 스크립트 ES6, 38 34 33 바이트

x=>x.some(a=>2*a==x[0]+x[1]+x[2])

매우 간단한 익명 함수이며 Python 답변에서 빌립니다. 입력 x을 배열로 취합니다 . 반환 true또는 false. Molarmanful와 jrich로 면도 한 바이트

각 숫자를 인수로 사용하는 38 바이트 프로그램 :

(a,b,c)=>[a,b,c].some(t=>t==(a+b+c)/2)

x=>x.some(a=>a==eval(x.join`+`)/2)4 바이트를 절약 해보십시오 .
Mama Fun Roll

@ ӍѲꝆΛꝆΛПҒЦꝆ 감사합니다! 좋은 트릭.
코너 O'Brien

x=>x.some(a=>2*a==x[0]+x[1]+x[2])작동하는 것 같습니다.
jrich

@jrich 감사합니다! 좋은 트릭!
코너 오브라이언

3

Oracle SQL 11.2, 49 바이트

SELECT 1 FROM DUAL WHERE(:1+:2+:3)/2IN(:1,:2,:3);

@xnor 솔루션을 다시 쓰십시오.


3

J, 6 바이트

+/e.+:

J.js로 사용해보십시오 .

작동 원리

+/e.+:    Monadic verb. Argument: A
    +:    Double the elements of A.
+/        Compute the sum of the elements of A.
  e.      Test for membership.

3

DUP , 31 자 / 39 바이트

[2ø2ø2ø++2/\%3ø^=3ø2ø=3ø3ø=||.]

Try it here!

내 첫 DUP 제출! 유니 코드는 굴입니다.

익명 함수 / 람다입니다. 용법:

5 3 2[2ø2ø2ø++2/\%3ø^=3ø2ø=3ø3ø=||.]!

설명

[                               {start lambda}
 2ø2ø2ø                         {duplicate 3 inputnums}
       ++                       {push sum(3 popped stack items)}
         2/\%                   {push (popped stack item)/2}
             3ø^=3ø2ø=3ø3ø=     {for all 3 inputs, -1 if inputnum=sum/2; else 0}
                           ||   {check if any of the 3 resulting values are truthy}
                             .  {output top of stack (boolean value)}
                              ] {end lambda}

나는 그것이 인코딩이 어떻게 작동하는지 생각하지 않습니다 ...
Conor O'Brien

ø코드 포인트 248이 있으므로 ISO 8859-1로 인코딩 된 경우 1 바이트입니다.
Dennis

1
... 인터프리터만큼 미세하다 할 수 실제로 작업 은 ISO 8859-1 인코딩 된 소스 파일을.
Martin Ender

@ MartinBüttner 나는 그것을 테스트 할 수 있다고 생각하지 않습니다.
Mama Fun Roll


3

펄 6, 20 19 바이트

바이트 수와 동일한 두 개의 함수가 있으므로 둘 다 넣을 것입니다. 당신의 공상을 간질이는 사람에게 감사하십시오.

{@_@_.sum div 2}
{@_∋+~(@_.sum/2)}

사용법 : 변수를 호출 할 수있는 변수에 하나를 할당하십시오.
편집 : 바이트 축소에 대한 @ b2gills 감사합니다


{@_∋@_.sum div 2}그리고 {@_∋+~(@_.sum/2)}모두 짧은
브래드 길버트는 b2gills

오, 고마워, 나는 항상 당신이 dotty 방법으로 sum을 부를 수 있다는 것을 잊어 버린다
Hotkeys

무엇을 합니까?
112638726

"∋"는 'contains'접두사 연산자로 왼쪽에 오른쪽이 포함되어 있습니다. 왼쪽은 오른쪽의 요소라고 말하는 "∈" '요소'op의 자매입니다. 그들은 둘 다 작전이며 perl 6은 실제로 많은 다른 사람들도 지원합니다! docs.perl6.org/language/…
핫키

3

Java 8 (람다 함수), 29 바이트

// Lambda Signature: (int, int, int) -> boolean

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

Java 코드 골프 솔루션은 일반적으로 프로그램이 완전한 기능을 수행 할 필요가없는 경우에만 짧습니다. (* 기침 기침 * 클래스 선언, 주요 방법)


2

Pyth, 6 바이트

/Q/sQ2

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

입력을 정수 목록으로 예상합니다. 다른 두 개를 빼서 숫자를 만들 수 없으면 0을 출력하고 하나 이상이면 0을 출력합니다.

설명:

@xnor의 답변과 동일한 알고리즘

/ Q / sQ2

   sQ # 목록의 모든 요소 합계
  / 2 # 합계를 2로 나눕니다.
/ Q # 목록에서 위의 숫자가 발생한 횟수

2

05AB1E , 비 경쟁

어리석은 일 때문에 경쟁하지 않는 4 바이트 . 암호:

DO;¢

거짓으로 0을 사용하고 진실로 0을 사용합니다. CP-1252 인코딩을 사용합니다.


이것을 경쟁적이지 않게 만드는 "멍청한"것은 무엇입니까?
Kyle Kanos

@KyleKanos 이미 Info.txt에 작성 하여 스택의 상단 을 반 으로 줄였습니다; . 그러나 내가 그것을 구현하지 않은 것을 추측하십시오 -_-.
Adnan

1
아 나는 그것을 할 거라고 방법을 볼 수 있습니다
카일 Kanos에게

2

코나 16 자

{((+/x)%2)_in x}

스택에서 벡터를 가져 와서 합산하고 2로 나누고 벡터에 있는지 확인합니다. 1을 true로, 0을 false로 반환합니다.

통해 전화

> {((+/x)%2)_in x} [(2;3;5)]
1
> {((+/x)%2)_in x} [(2;3;4)]
0

2

jq, 17 자

(그래도 xnorPython 3 답변을 다시 작성하십시오. 유권자 들은 그 답변으로 가야합니다.)

contains([add/2])

입력 : 3 개의 정수 배열.

샘플 실행 :

bash-4.3$ jq 'contains([add/2])' <<< '[5, 3, 2]'
true

bash-4.3$ jq 'contains([add/2])' <<< '[2, 3, -5]'
false

온라인 테스트 :

jq, 18 자

(17 자 코드 + 1 자 명령 행 옵션)

contains([add/2])

입력 : 3 개의 정수 목록.

샘플 실행 :

bash-4.3$ jq -s 'contains([add/2])' <<< '5 3 2'
true

bash-4.3$ jq -s 'contains([add/2])' <<< '2 3 -5'
false

2

MATL , 5 바이트

사용 XNOR의 위대한 접근 @ :

s2/Gm

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

s    % implicitly input array of three numbers. Compute their sum
2/   % divide by 2
G    % push input again
m    % ismember function: true if sum divided by 2 equals some element of the input

무차별 접근 방식, 12 바이트 :

Y@TT-1h*!s~a

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

Y@       % input array of three numbers. Matrix with all
         % permutations, each one on a different row
TT-1h    % vector [1,1,-1]
*        % multiply with broadcast
!s       % transpose, sum of each column (former row)
~a       % true if any value is 0


2

CJam, 10 12 바이트

l~:d_:+2/&

@ MartinBüttner 덕분에 2 바이트가 제거되었습니다.

숫자를 정확한 결과로 표시하고 잘못된 결과로 출력하지 않습니다.

여기 사용해보십시오

l~     e# read line and evaluate. Pushes the array
:d     e# convert array to double
_      e# duplicate
:+     e# fold addition on the array. Computes sum of the array
2/     e# divide sum by 2
&      e# setwise and (intersection)

2

정말 6 바이트

,;䫡u

false이면 0을, 그렇지 않으면 양의 정수를 출력합니다.


2

수학, 20 19 바이트

MemberQ[2{##},+##]&

대부분의 다른 답변과 유사하게 작동합니다.


어때요 MemberQ[2{##},+##]&? (그리고 바이트 수를 잊어 버렸습니다)
Martin Ender

2

하스켈, 20 바이트

(\l->sum l/2`elem`l)

xnor의 솔루션 사용.


이후 (/)정수 작동과 도전은 정수를 요구하지 않는다, 나는 확실하지이 실제로 유효한 해결책이 있어요.
Zeta

나는 그것을 보지 못했다. 타입 변환이 코드의 일부 여야합니까? 이처럼 : (\l->sum l/2`elem`l).map fromInteger그것은 다음 과 같이 사용될 수 있습니다 : ((\l->sum l/2`elem`l).map fromInteger) ([2,3,5] :: [Integer]). 내가 입력하는 대신 3의 3.0 할 필요가 없었어요 그래서 어떤 날을 던진 것은 내가 입력 유형, 그들은이 기록 된 다만 방법을 지정하지라고 생각 파이썬 3의 사용을 언급 XNOR이었다고 생각한다 ...
basile- henry

유형이 실제로 문제가되면 목록을 입력으로 사용한다는 사실이 더 문제가되지 않아야합니까?
basile-henry

좋은 지적. 나는 그것에 대해 OP에게 물어볼 것이다. 그러나 다른 모든 답변도 목록을 사용한다고 가정하면 괜찮습니다 (또한 튜플을 사용할 때 함수가 유형을 입력하지 않은 이유를 알 수 있습니다).
Zeta

예, 입력이 목록 대신 튜플이 아니 sum거나 elem작동 하지 않으면 아마도 목록으로 지정했을 것입니다.하지만이 답변은 문자 그대로 xnor가 (Haskell에서) 제출 한 것이므로 필요하다고 생각하지 않았습니다. :)
basile-henry

2

펄, 24 + 4 = 28 바이트

$^+=$_/2 for@F;$_=$^~~@F

-paX플래그를 실행 해야 1하며 True로 인쇄 하고 False로 아무것도 인쇄 하지 않습니다.

-X 모든 경고를 비활성화합니다.

$ perl -paXe'$^+=$_/2 for@F;$_=$^~~@F' <<< '5 3 7'
$ perl -paXe'$^+=$_/2 for@F;$_=$^~~@F' <<< '5 3 8'
1

영감을주는 것. 영감을 얻었습니다 : $_=eval(y/ /+/r)/2~~@F(같은 명령 줄 옵션을 사용합니다).
manatwork

@manatwork 재미있는 사용법 tr:)
andlrc

-XPerl 버전 [5.10 .. 5.18)을 지정하여 이를 생략 할 수 있습니다. (Smart match는 5.10에 도입되었고 실험적인 경고는 5.18에 도입되었습니다.이 둘 사이의 모든 버전은 ~~없이도 잘 작동합니다 -X.)
manatwork


1

철탑 , 8

xnor 알고리즘의 또 다른 구현.

i:As2A/_

작동 방식 :

i    # Get command line input.
:A   # Initialize a constant A.
  s  # Set A to the sum of the stack.
2    # Push 2 to the stack.
A    # Push A to the stack.
/    # Divide A/2
_    # Check if the top of the stack is in the previous elements.
     # Print the stack on quit.

1

SpecBAS-36 바이트

xnors 공식 사용

1 INPUT a,b,c: ?(a+b+c)/2 IN [a,b,c]

true이면 1을 출력하고 false이면 0을 출력


1

05AB1E , 6 5 바이트

;Oм_O

@xnor 의 Python 3 알고리즘 포트를 생성하여 -1 바이트 .

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

·        # Halve every item in the input-array
         #  i.e. [10,6,4] → [5.0,3.0,2.0]
 O       # Sum this array
         #  i.e. [5.0,3.0,2.0] → 10.0
  м_O    # Output 1 if the input-array contain this sum, 0 otherwise
         #  i.e. [10,6,4] and 10.0 → 1

나는 м_O단축 될 수 있다고 확신 하지만, 어떤 명령을 사용 해야하는지 잘 모르겠습니다.


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