Mod 2 다항식 계수


14

퀴 토피아는 여기 에 다항식 계수 계산에 대한 도전을 게시했습니다 ( 여기 의 일부 텍스트는 여기에서 복사 됨). 다항식 계수 mod 2를 계산하는 재미있는 알고리즘이 있습니다.

숫자 목록 k 1 , k 2 , ..., k m이 주어지면 다항식 계수의 잔차를 출력합니다.

enter image description here

2.이 감소 개조 효율적 않는 알고리즘 뒤의 각각에 대한 K , 이진 확장 계산 K를 이라고 발견 IJ을 이러한 각 것을 (IJ)는 1 또는 0이고

enter image description here

임의 J 등이 있으면 RJ는 A = SJ = 1 ≠ R (S)에 대한 다음 연관된 개조 2 다항식 계수는 달리 개조 2 다항식 계수는 1, 0이다.

직무

m 개의 숫자 k 1 , k 2 , ..., k m 을 취하여 해당 다항식 계수를 출력하거나 반환 하는 프로그램 또는 함수를 작성하십시오 . 필요한 경우 프로그램이 선택적 으로 추가 인수로 m 을 사용할 수 있습니다.

  • 다항식 계수의 실제 계산이 인코딩 프로세스가 아닌 코드에 의해 수행되는 한, 이러한 숫자는 원하는 형식으로 입력 될 수 있습니다 (예 : 목록으로 그룹화되거나 단항으로 인코딩 됨).

  • 다항식 계수가 홀수이면 출력은 임의의 값이고 다항식 계수가 짝수이면 출력은 임의의 값일 수 있습니다.

  • 다항 계수를 계산하도록 설계된 내장 기능은 허용되지 않습니다.

  • 표준 허점이 적용됩니다.

채점

이것은 코드 골프입니다 : 바이트 단위의 최단 솔루션이 승리합니다.

예 :

7, 16 및 1000의 다항식 계수를 찾으려면 각각을 이진 확장합니다.

enter image description here

열이 1을 초과하는 열이 없기 때문에 다항식 계수는 홀수이므로, 우리는 무언가 진실한 결과를 출력해야합니다.

7, 16 및 76의 다항식 계수를 찾으려면 각각을 이진 확장합니다.

enter image description here

76과 7 모두 이진 확장에서 4를 가지므로 다항식 계수는 짝수이므로 거짓 값을 출력합니다.

테스트 사례 :

Input: [2, 0, 1]
Output: Truthy

Input: [5,4,3,2,1]
Output: Falsey

Input: [1,2,4,8,16]
Output: Truthy

Input: [7,16,76]
Output: Falsey

Input: [7,16,1000]
Output: Truthy

Input: [545, 1044, 266, 2240]
Output: Truthy

Input: [1282, 2068, 137, 584]
Output: Falsey

Input: [274728976, 546308480, 67272744, 135004166, 16790592, 33636865]
Output: Truthy

Input: [134285315, 33849872, 553780288, 544928, 4202764, 345243648]
Output: Falsey

1
PPCG에 오신 것을 환영합니다! 좋은 첫 포스트!
Rɪᴋᴇʀ

나는 ==진실과 거짓이 뒤집어지면 평등을 가진 여러 언어가 바이트를 절약 할 수 있다고 생각 합니다.
Ørjan Johansen

@ ØrjanJohansen 괜찮습니다.
후드

답변:







2

자바 스크립트 (ES6), 37 35 34 바이트

@ Mr.Xcoder 덕분에 2 바이트 절약 @ETHproductions
덕분에 1 바이트 절약

비트 OR과의 합을 비교하면 ( pizzapants184Leaky Nun 과 같이 ) 초기 접근 방식보다 1 3 4 바이트 짧습니다.

a=>(q=c=>eval(a.join(c)))`|`==q`+`

테스트 사례


Alt. 버전, 38 바이트

a=>!a.some((x,i)=>a.some(y=>i--&&x&y))

테스트 사례


기술적으로, pizzapants184는 나보다 14 초 일찍 응답했습니다.
Leaky Nun

-1 바이트 :a=>(q=c=>eval(a.join(c)))`|`==q`+`;
ETHproductions

@ETHproductions 니스! 이것은 Node.js에서 잘 작동합니다. 그러나 브라우저에서 작동하게 했습니까?
Arnauld

Firefox 57에서 제대로 작동합니다. 오류가 발생하거나 제대로 작동하지 않습니까?
ETHproductions

@ETHproductions 실제로는 작동합니다. repl.it 에서 실패합니다 .
Arnauld

2

하스켈 , 38 바이트

(==).sum<*>foldl1 xor를 반환하는 익명 함수 Bool입니다. 로 사용하십시오 ((==).sum<*>foldl1 xor) [2,0,1].

import Data.Bits
(==).sum<*>foldl1 xor

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

  • Pizzapants184와 Leaky Nun의 거의 동일한 트릭은 Haskell 연산자 이름을 사용 xor하여 (.|.)(비트 또는) 대신 (비트)을 사용하도록 1 바이트를 절약 합니다.

  • (==).sum<*>foldl1 xor의 무료 버전입니다 \l->sum l==foldl1 xor l.


2

자바 8, 53 바이트

a->{int i=0,j=0;for(int x:a){i+=x;j|=x;}return i==j;}

@LeakyNun 의 젤리 답변 포트 .

설명:

여기에서 시도하십시오.

a->{             // Method with integer-array parameter and boolean return-type
  int i=0,j=0;   //  Two integers, both starting at 0
  for(int x:a){  //  Loop over the array
    i+=x;        //   Add them to the first integer
    j|=x;}       //   And bitwise-OR it with the second integer
  return i==j;}  //  Return if both integers are the same after the loop




1

빨강 , 78 바이트

f: func[x][b: :to-binary t: 0 s: b 0 foreach n x[t: t + n s: s or b n]s = b t]

작동 방식 :

언 골프 드 :

Red []
f: func [x][         -  a function taking a block as an argument
    b: :to-binary    -  an alias for the to-binary function
    t: 0             -  set the sum of the numbers to 0
    s: b 0           -  set the "or" total to binary 0
    foreach n x[     -  for each number in the block
        t: t + n     -  add it to the sum
        s: s or b n  -  bitwise or of its binary representation with the total
    ]
    s = b t          - are the sum (binary) and the "or" total equal?
]

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



0

배치, 73 바이트

@set/as=o=0
@for %%i in (%*)do @set/as+=%%i,o^|=%%i
@if %s%==%o% echo 1

출력 1truthy를 들어, falsy에 대한 아무것도. pizzapants184 / Leaky Nun 알고리즘의 또 다른 명백한 포트.


0

J , 10 바이트

+/=+./&.#:

또 다른 피자 팬츠 184 's & Leaky Nun 's 솔루션 포트.

어떻게 작동합니까?

+/.&.#: -숫자를 이진수로 변환하고 비트 단위 또는 2의 거듭 제곱에 적용하고 이진수에서 10 진수로 다시 변환

+/ -추가하여 입력을 줄입니다

= -위의 내용이 동일합니까?

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

간단한 대안

J , 12 바이트

2>[:>./+/@#:

어떻게 작동합니까?

+/@#: -각 숫자를 이진수로 변환하고 2의 거듭 제곱의 합을 찾으십시오.

>./ -최대를 찾으십시오

2>-2보다 작습니까? -> 진실

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


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