두 숫자에 고유 계승이 포함되어 있습니까?


11

두 숫자를 계승으로 나눕니다. 공유하는 것이 있으면 잘못된 값을 반환하십시오. 그렇지 않으면 진실한 값을 반환하십시오. ( 이 최근 질문에서 영감을 얻음 )

다시 말해, 각 입력 숫자를 가장 합리적으로 계승 (양의 정수)의 합으로 쓰십시오. 두 표현에 계승이 나타나지 않으면 참 값을, 그렇지 않으면 거짓 값을 반환합니다.

주어진 20과 49 :

20 = 3! + 3! + 3! + 2!
49 = 4! + 4! + 1!

두 표현 모두에 계승이 나타나지 않으므로 진실한 값을 반환하십시오.

주어진 32와 132 :

132 = 5! + 3! + 3!
 32 = 4! + 3! + 2!

삼! 두 표현에 모두 나타나므로 잘못된 값을 반환하십시오.

I / O

입력 및 출력은 모든 표준 수단을 통해 이루어질 수 있습니다 .

입력은 항상 음이 아닌 두 정수입니다. 언어에 필요한 것 이외의 정수에는 상한이 없습니다.

결과는 진실하거나 거짓된 값이어야합니다 . 모든 값이 정확하게 진실 / 거짓이면이 값이 다른 입력에 반드시 일치 할 필요는 없습니다.

테스트 사례

하나의 입력이 0인 경우 항상 정답입니다. 다른 진실한 테스트 사례 :

{6, 3}, {4, 61}, {73, 2}, {12, 1}, {240, 2}, {5, 264}, {2, 91}, {673, 18},
 {3, 12}, {72, 10}, {121, 26}, {127, 746}

두 입력이 모두 홀수이거나 두 입력이 모두 양의 정수이면 출력은 항상 거짓입니다. 다른 잘못된 테스트 사례 :

{8, 5}, {7, 5}, {27, 47}, {53, 11}, {13, 123}, {75, 77}, {163, 160}, {148, 53},
 {225, 178}, {285, 169}, {39, 51}, {207, 334}, {153, 21}, {390, 128}, {506, 584},
 {626, 370}, {819, 354}

이것은 이므로 가장 적은 바이트가 이깁니다!


당신은 의미하지 않는다 "는 greediest 가능한 방법으로 (양의 정수) 계승의 합으로 각 입력 번호 쓰기" 게으른 가능한 방법 을 대신?
user41805

4
@KritixiLithos 번호 그는 탐욕스러운 알고리즘으로 알려진 알고리즘 클래스를 언급하고 있는데, 이는 각 단계 후에 일부 메트릭을 최대화하여 작동합니다. 마찬가지로 가능한 한 많이 복용하십시오.
John Dvorak

답변:


9

젤리 , 7 바이트

Æ!ṠḄ&/¬

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

작동 원리

Æ!ṠḄ&/¬  Main link. Argument: (x, y) (pair of integers)

Æ!       Convert x and y to factorial base.
  Ṡ      Apply the sign function to each digit.
   Ḅ     Unbinary; convert each resulting Boolean array from base 2 to integer.
    &/   Reduce the resulting pair of integers by bitwise AND.
      ¬  Take the logical NOT of the result.

Æ!특정 시나리오에서 매우 유용합니다.
매직 문어 Urn

징후를 나타내지 않고 계승 목록을 요소 단위로 직접 곱하면 얻을 수있는 것이 있습니까?
Greg Martin

@GregMartin 나는 그렇게 생각하지 않습니다. 자릿수 배열은 같은 길이로 채워지거나 잘 려야하므로 저장하는 것보다 더 많은 바이트가 필요합니다.
Dennis



2

자바 스크립트 (ES6), 71 바이트

(a,b,g=(n,e=1,f=1)=>n>=f&&g(n,++e,f*e)+((n/f|0)%e&&1<<e))=>!(g(a)&g(b))

JavaScript의 정수는 정밀도가 53 비트로 제한되어 있으며 18에 충분합니다.; 즉, 필요한 계승을 추적하기 위해 18 비트 마스크를 사용할 수 있습니다.



0

수학, 73 바이트

F[x_]:=First@IntegerPartitions[x,99,Range[99]!];!IntersectingQ[F@#,F@#2]&

입력 양식

[x1, x2]


이것을 테스트하는 데 몇 가지 오류가 발생합니다.
Scott Milner

마지막에 입력하십시오 [x1, x2]
J42161217

아 두 개의 별도 정수 대신 목록을 입력하고있었습니다. ±x_:=First@IntegerPartitions[x,99,Range[99]!];!IntersectingQ[±#,±#2]&[4,61](69 바이트)로 더 골프를 칠 수 있습니다 . ISO 8859-1 인코딩에서는 ±1 바이트입니다.
Scott Milner

0

C, 122 119 바이트

G(q,i){return gamma(q+1)>i?gamma(q):G(q+1,i);}
Q(a,b,u,v){while(a&&b){a-=u=G(1,a);b-=v=G(1,b);if(a==b)exit();}exit(0);}

Q주요 기능입니다. 정확히 두 개의 양의 정수 값으로 호출해야합니다. 이것은 진실과 거짓 에 대한 종료 코드 로 종료됩니다 .01

이것은 TIO에서는 작동하지 않지만 Homebrew가 제공된 시스템에서 작동합니다 gcc 7.1.0.

나는 C꽤 오랫동안 골프를 치지 않았 으므로 골프 팁은 대단히 높이 평가됩니다!

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