두 값 병합


44

각각 0"알 수 없음"을 나타내는 두 값 중 하나 또는 하나를 나타냅니다 1,2,3. 다음과 같이 단일 값으로 병합하십시오.

  • 두 값이 모두 0이 아닌 경우 해당 값을 출력하십시오.
    (3,3) -> 3
  • 두 값이 모두 0이 아닌 같으면 알 수없는 경우 0을 출력하십시오.
    (1,2) -> 0
  • 한 값이 0이고 다른 값이 아닌 경우 0이 아닌 값을 출력하십시오.
    (2,0) -> 2, (0,1) -> 1
  • 두 값이 모두 0이면 0을 출력하십시오.
    (0,0) -> 0

테스트 사례 :

16 개의 가능한 입력 쌍이 있습니다.

  | 0 1 2 3
--+--------
0 | 0 1 2 3
1 | 1 1 0 0
2 | 2 0 2 0
3 | 3 0 0 3

(0, 0) -> 0
(0, 1) -> 1
(0, 2) -> 2
(0, 3) -> 3
(1, 0) -> 1
(1, 1) -> 1
(1, 2) -> 0
(1, 3) -> 0
(2, 0) -> 2
(2, 1) -> 0
(2, 2) -> 2
(2, 3) -> 0
(3, 0) -> 3
(3, 1) -> 0
(3, 2) -> 0
(3, 3) -> 3

리더 보드


8
네 번째 규칙은 첫 번째 규칙에 적합하므로 왜 당신이 그것들을 분리했는지 모르겠습니다.
치명적

1
Nitpick : 네 번째 포인트는 중복되므로 첫 번째 포인트에서 "0이 아닌"을 제거 할 수 있습니다. 편집 : 와우, @Fatalize 닌자 무엇입니까.
Outgolfer Erik

또한 가능한 입력 수를 늘리더라도 3은 실제로 필요하지 않습니다.
Outgolfer Erik

2
나는 규칙을 정리하는 것을 고려했지만 모든 0/0이 아닌 경우를 나열하고 최적화를 골퍼에게 맡기는 것이 가장 분명하다고 생각했습니다.
xnor

2
리더 보드 가 필요합니다 . 첫 번째 페이지는 두 번째 페이지에서 이미 답을 얻습니다.
Ørjan Johansen

답변:


22

파이썬 3 , 27 25 바이트

lambda x,y:(x|y)>>(x*y&2)

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


5
나는 이것이 3을 초과하는 입력에 대해 깨지는 것을 좋아한다. 어떻게 이것을 생각해 냈습니까?
Jakob

4
기본적으로 많은 시행 착오.
Dennis

1
흥미 롭군 잠시 동안 두 개의 정수와 소수의 연산자가 포함 된 제한된 길이의 표현식을 통해 검색을 자동화하려고 생각했지만 약 20 바이트에서도 공간이 너무 큽니다. 약간의 지능이 필요합니다!
Jakob


10

APL (Dyalog) , 5 바이트

⌈×∧=⌊

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

유용한 참조

∧=⌊: 1최저 공배수가 최소값과 같은지 여부를 반환 합니다. 값 중 하나가 0이거나 둘 다 같은 경우에만 해당됩니다. 다른 방법으로=*⌊

⌈×: 최대 값에 상기 값을 곱한 값입니다.


7

셰익스피어 프로그래밍 언어 , 296 바이트

Z.Ford,.Ajax,.Act I:.Scene I:.[Enter Ford and Ajax]Ajax:Listen to thy heart.Ford:Listen to thy heart.Am I as fat as you?Ajax:If so,let us Scene C.Am I as fat as zero?If so,let us Scene C.Ford:Am I as fat as zero?If not,you zero.open heart.let us Scene V.Scene C:.Ajax:open heart.Scene V:.[Exeunt]

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

코드 골프 챌린지에 먼저 참여하기 때문에 내가 좋아하는 농담 언어 중 하나로 시작합시다!

설명 : 두 개의 변수 Ford 및 Ajax 선언 (가장 짧은 변수 이름 사용 가능)

Z.Ford,.Ajax,.

첫 번째 장면 : 두 값을 변수에 넣은 다음 같은지 테스트하고 0에 대해 Ajax를 테스트합니다. 반환해야하는 값이 변수 Ford에 저장되어 있으면 장면 C로 이동하십시오.

Act I:.
Scene I:.
[Enter Ford and Ajax]
Ajax:
Listen to thy heart.
Ford:Listen to thy heart.
Am I as fat as you?
Ajax:
If so,let us Scene C.
Am I as fat as zero?
If so,let us Scene C.

Ford가 0이면 Ajax를 인쇄하고, 그렇지 않으면 Ajax를 0으로 설정 한 다음 Ajax를 인쇄하십시오. 그런 다음 프로그램 끝으로 이동하십시오.

Ford:Am I as fat as zero?
If not,you zero.
open heart.
let us Scene V.

장면 C : 포드 인쇄

Scene C:.
Ajax:open heart.

장면 V : 프로그램의 끝.

Scene V:.
[Exeunt]


2
나보다 명백하게 더 나은 버전입니다 @JoKing, 난 당신이 대답으로 게시하는 경우 프로그램의 뒤에 추론은 매우 다르다 내가 당신의 일에 대한 신용을 먹고 싶어하지 않는 것이 더 좋을 것이라고 생각
기욤 Ruchot

6

루비 , 21 바이트

->a,b{(a|b)*531[a*b]}

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

루비 때문에

간단한 설명 :

  • a|b bitwse OR이므로 a == b 또는 그중 하나가 0이면 올바른 숫자를 제공합니다.

  • 매직 번호 531는 2 ^ 9 + 2 ^ 4 + 2 ^ 1 + 2 ^ 0이며 [] 연산자는 단일 비트를 추출합니다. a * b가 0, 1, 2, 4 또는 9이면 1을 곱하고 그렇지 않으면 0을 곱합니다.

  • 3보다 큰 값에는 작동하지 않습니다.



5

Pyth , 8 7 바이트

@{+0SQ3

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

@{+0SQ3   Implicit: Q=input()

    SQ    Sort input
  +0      Prepend 0
 {        Deduplicate
@     3    Get 4th element (index 3), modular indexing

사례 1-0이 아닌 값

Sorted Input   [3,3]
Prepend 0      [0,3,3]
Deduplicate    [0,3] - index 3 yields 3

사례 2-0이 아닌 값과 같지 않은 값

Sorted Input   [1,2]
Prepend 0      [0,1,2]
Deduplicate    [0,1,2] - index 3 yields 0

사례 3-정확히 하나의 값 0

Sorted Input   [0,1]
Prepend 0      [0,0,1]
Deduplicate    [0,1] - index 3 yields 1

사례 4-두 값 모두 0

Sorted Input   [0,0]
Prepend 0      [0,0,0]
Deduplicate    [0] - index 3 yields 0

대체 솔루션, 7 바이트

*eSQ}s{

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

*eSQ}s{QQ   Trailing Q's inferred

      {Q    Deduplicate input
     s      Take the sum
    }   Q   Is this in the input? True treated as 1, false as 0
*           Multiplied by
 eSQ        Max from input (end of sorted input) 

이전 버전, 8 바이트

@+0{-QZ3

@xnor 감사합니다. 지금 수정해야합니다
Sok

@{+0Q36 바이트에서 작동합니다.
Mr. Xcoder


4

Stax , 8 바이트

Ç∞∟∙◄╥*♣

실행 및 디버깅

포장을 풀고 포장을 풀고 주석을 달았습니다.

    e.g.        [2, 0]
c:s [2, 0] 2    calculate the "span" of the input array (max(a) - min(a))
+   [2, 0, 2]   append the span to the input array
o   [0, 2, 2]   sort the 3-element array
E   0 2 2       explode the 3 elements into 3 separate stack entries
a   2 2 0       rotate the third stack element to the top of stack
!   2 2 1       logical not, produces 1 iff the top value was 0
*   2 2         multiply
                implicitly print top of stack

이것을 실행



4

(첫 제출이므로 너무 세게 걷지 마십시오)

파이썬 2 , 57 44 43 바이트

lambda a,b:(0 if a*b else a+b)if a-b else a

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

( 첫 번째 파이썬 답변을 보고 약간 압축 )



44가 여전히 44입니다. (
Jo King

@JoKing 응? 귀하의 솔루션은 훌륭합니다. 저는 산술로 시도했지만 실패하고 if / else로 떨어졌습니다
Oct18은 SE

4

C (gcc), 25 바이트

f(a,b){a=a^b&&a*b?0:a|b;}

의사 코드 :

foo(A,B)
    if A XOR B and A*B are > 0
        return 0
    else 
        return A OR B`

3

C (gcc), 26 바이트

f(a,b){a=a*b?a-b?0:a:a+b;}

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

확장 / 언 골프 :

int f(int a, int b) { // implicit-int (C89)
    // return replaced with assignment: link
    return a*b ? // if a and b are both not zero, then
        a-b ? // if a != b
        0 : // a != b, so return 0
        a // a == b, so return a
    : a+b // one of a,b is zero, so return whichever is nonzero 
    ;
}

3

MATL , 9 바이트

dGp*~GX>*

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

설명:

           % Implicit input as a vector with two elements implicitly. Stack: [0,2]
d          % The difference between the two elements. Stack: [2]
 G         % Push input again. Stack: [2], [0,2]
  p        % The product of the last element (the input). Stack: [2], [0]
   *       % Multiply the two elements on the stack. Stack: [0]
    ~      % Negate. Stack: [1]
     G     % Push input again. Stack: [1], [0,2]
      X>   % Maximum value. Stack: [1], [2]
        *  % Multiply the two elements on the stack. Stack: [2]
           % Implicit output

실패한 outgolf :t?td~*]X>
sundar

3

GNU sed, 23 바이트

s/^0?(.)\1?0?$/\1/
t
c0

( -r플래그 로 실행해야 함 )

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


1
PPCG에 오신 것을 환영합니다 :) 현재의 합의는 플래그를 세지 않는다는 것입니다 (전화를 받았으므로 관련 메타를 연결할 수 없습니다).
Shaggy

1
오 쿨! 휴대 전화를 사용하고 있기 때문에 나중에 수정하겠습니다. 무료 -3 바이트는 PPCG에 큰 환영입니다 :)
KernelPanic

3

Q 기본, 34 바이트

다른 접근법!

INPUT a,b
?(a OR b)*-(a*b=0OR a=b)

출력 그리드에서 0이 아닌 값이 모두 OR두 입력 숫자 의 비트 단위인지 확인 하십시오. 이것은 a OR bQBasic에 있습니다. 우리는이 값을 출력 할 때 a*b=0 OR a=b, 0그렇지 않으면 위에서 언급 한 조건부의 음의 값을 곱하여 할 수 있습니다 (진실은 -1QBasic에 있기 때문에 음수 ).


2

brainfuck, 25 바이트

,>,[>]<<[[->->+<<]>[>]]>.

입력은 2 바이트 값입니다 (아스키가 아님).


2

스위프트 , 118 바이트

func c(n1:Int,n2:Int){n1==n2 ? print("\(n1)") : (n1*n2 != 0 ? print("0") : (n1==0 ? print("\(n2)") : print("\(n1)")))}

4
PPCG에 오신 것을 환영합니다! 나는 Swift를 모른다.하지만 변수 이름을 각각 1 문자로 만들고 같은 연산자와 !=삼항 연산자 주위의 공백을 제거하여 많은 바이트를 절약 할 수있다 .
OUurous

1
안녕하세요, PPCG에 오신 것을 환영합니다! @ Οurous에서 언급했듯이 짧게 변경 n1하고 n2단일 문자로 변경할 수 있습니다. 공백과 괄호를 제거하고 공백을 제거하십시오. 또한, ==0수 있습니다 <1!=0수 있습니다 >0우리는 단지 입력이 알고 있기 때문에 0,1,2,3가능합니다. Swift에서 프로그래밍 한 적이 없지만 다음과 같이 91 바이트로 func c(a:Int,b:Int){a==b ?print("\(a)"):a*b>0 ?print("0"):a<1 ?print("\(b)"):print("\(a)")} 줄였습니다. 온라인으로 시도하십시오.
Kevin Cruijssen

또한 다음과 같이 51 바이트로 줄일 func c(a:Int,b:Int){print(a==b||a*b<1 ?max(a,b):0)} 수 있습니다. 온라인으로 시도하십시오. PPCG에 다시 오신 것을 환영합니다.
Kevin Cruijssen

1
@KevinCruijssen의 골프 외에도 제출을 익명의 마감으로 전환하여 87 바이트를 절약 {$0==$1||1>$0*$1 ?max($0,$1):0} 할 수 있습니다. 온라인으로 사용해보십시오!
Mr. Xcoder

2

배치, 38 36 35 30 바이트

@cmd/cset/a"(%1|%2)>>(%1*%2&2)

조건부가 배치에서 너무 비싸기 때문에 @Dennis의 Python 답변 포트.




2

05AB1E , 9 8 바이트

àIËIP_+*

@MagicOctopusUrn 덕분에 -1 바이트 .

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

설명:

à         # Take the maximum of the input-list
          #  [0,2] → 2
IË        # Are all elements in the input-list equal?
          #  [0,2] → 0
  IP_     # Take the product of the input-list, and verify if it equals 0
          # (`_` transforms 0 into 1; everything else into 0)
          #  [0,2] → 0 (product) → 1 (==0)
     +    # Add them together (since only 1 is truthy in 05AB1E, this is basically an OR)
          #  0+1 → 1
*         # Multiply both values on the stack
          #  2*1 → 2

일반화 된 설명 :

IËIP_+    # If both values are equal, or one of them is a zero:
 à        #  Output the maximum of the two values
          # Else:
          #  Output 0

Ës0å~iZë0내 것이었다; 좋은 것. 실제로 9 바이트를 많이 이길 수 있는지 확실하지 않습니다.
Magic Octopus Urn

1
나는 논리적으로 동등한 à®Ë®P_+*부분 _으로 되돌려받습니다
Magic Octopus Urn

_0을 1로, 다른 모든 값을 0으로 바꿉니다.
Magic Octopus Urn

트윗 담아 가기 이 대답을 할 때 나는 == 0명령 이 있는지 알기 위해 문서를보고 있었지만 _정확히 그렇게 했는지 몰랐습니다 . 미래의 다른 과제에도 유용해야합니다. 틸. :)
Kevin Cruijssen



2

자바 스크립트 ES6, 25 22 21 20 바이트

a=>b=>a?b-a?!b*a:a:b

14 13 바이트 , 인수가 정렬 된 순서로 제공되는 경우

a=>b=>a%b?0:b


2

Q 기본, 38 36 35 바이트

INPUT a,b
?(a*b>0)*(b-a*(a<>b))+a+b

Erik의 IF ... THEN ... ELSE답변 에서 부분적으로 영감을 얻은 수학 전용 솔루션이 있습니다.

내가 여기에 어떻게

수학 - 조건문과를 이해하기위한 중요 사항 : QBASIC에, 비교 연산자의 결과는 0하고 -1,하지 01.

우리는 Erik의 코드로 시작합니다 :

IF a*b THEN?a*-(a=b)ELSE?a+b

다시 말해, aand b가 0이 아닌 경우 print a*-(a=b)( aif a=b, 그렇지 않으면 0); 다른 (중 적어도 하나 ab제로), 출력 a+b(영이 아닌 번호 또는 0그들은 양쪽 모두 0 인 경우).

이미 조건부 조건이있는 수학이 있습니다. 한 걸음 더 나아가서 IF문장을 완전히 제거 할 수 있는지 봅시다 . 우리는 a*b>0외부 조건 에 사용해야 합니다. a*b여러 개의 다른 값을 가질 수 있습니다. 이것은 IF수학에는 문제가 있지만 문제가됩니다.

c=a*b>0
?c*a*(a=b)+(c+1)*(a+b)

이것이 제거 의 표준 요령 입니다 IF. 때 c, 사실 c*a*(a=b)이다 -a*(a=b)하고 (c+1)*(a+b)있다 0; when c가 false이면 c*a*(a=b)is 0(c+1)*(a+b)is a+b입니다. 따라서이 표현식은와 동일한 결과를 제공합니다 IF ... THEN ... ELSE. 유일한 문제는 프로그램을 38 바이트 대신 40 바이트로 만드는 것입니다. 수학을 다시 정렬하여 프로그램을 줄일 수 있습니다.

c=a*b>0
?c*a*(a=b)+c*(a+b)+a+b

여전히 40 바이트 ...

c=a*b>0
?c*(a+b+a*(a=b))+a+b

이제 우리 프로그램은 38 바이트로 돌아 왔습니다. 그러나 c한 번만 사용 하므로 변수에 더 이상 변수를 할당 할 필요가 없습니다.

?(a*b>0)*(a+b+a*(a=b))+a+b

이제 36 바이트로 줄었습니다.

그러나 더 많은 것을 기다립니다.a+b+a*(a=b)표현은 약간 중복되어 보입니다. a*(a=b)-a경우 a=b0그렇지 않은 경우. 에 추가 a하면 0if a=ba그렇지 않습니다. 조건을 반대로하여 더 적은 바이트로 동일한 것을 달성 할 수 있습니다.

b+a*-(a<>b)

처음에는 짧게 보이지 않습니다. 그러나 음수를 추가하는 대신 빼기를 사용하여 바이트를 절약 할 수 있습니다.

b-a*(a<>b)

그리고 거기에는 35 바이트 솔루션이 있습니다.


저기 좋은 속임수 ...
Outgolfer Erik

1

클린 , 46 43 42 바이트

import StdEnv
?[a,b]|a<1||a==b=b=0

?o sort

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

익명 구성 :: [Int] -> Int은 쌍을 정렬 한 다음 첫 번째 멤버와 일치시킵니다.

구성된 람다로 사용하는 길이는 같습니다.

import StdEnv

(\[a,b]|a<1||a==b=b=0)o sort

1

젤리 , 7 6 바이트

׬o=a»

온라인으로 사용해보십시오! 또는 모든 조합을 시도하십시오!

어떻게?

׬o=a»   Dyadic link
×        Multiply the two arguments.
 ¬       Logical not. Gives 1 if one argument is 0, 1 otherwise.
   =     Are the two arguments equal?
  o      Logical or the result of = and ¬. 
     »   Greater of the two arguments.
    a    Logical and. Gives the greater of the two arguments if they are equal
         or if one of them is zero and gives 0 otherwise.

APL answer 의 메소드를 사용하면 동일한 바이트 수를 얻습니다. 가장 낮은 공배수는 2 바이트이므로이 답보다 1 바이트 더 깁니다.

6 바이트

«=æl×»

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


또한 아래의 다른 방법을 참고하십시오
H.PWiz

@ H.PWiz 오, 나는 당신이 링크의 것과 같은 방법을 사용하고 있다고 생각했다
dylnan

나는 두 가지 방법 ∧=⌊을 제공 =*⌊합니다. 두 번째는 Jelly가 선호합니다
H.PWiz

@ H.PWiz 나는 APL을 말하지 않으며, 당신이 설명한 방법을 사용하고있었습니다. 무엇을 =*⌊합니까?
dylnan

그것은 젤리와 거의 동일하지만 최소한입니다. 또는 ×두 언어 모두에서 사용할 수 있습니다
H.PWiz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.