Mod 2多項係数


14

quintopiaは、ここで多項係数を計算するための課題を投稿しました(ここのテキストの一部はそこからコピーされています)。多項係数mod 2を計算する楽しいアルゴリズムがあります。

数のリストk 1k 2、...、k mが与えられると、多項係数の剰余を出力します。

ここに画像の説明を入力してください

それぞれについて、以下のアルゴリズムが効率的にこれを行うMOD 2を減少K iがバイナリ拡張計算し、kはiが発見であること、IJ各ようにijが 1または0であり、そして

ここに画像の説明を入力してください

r≠sに対してa rj = a sj = 1のようなjがある場合、関連するmod 2多項係数は0です。それ以外の場合、mod 2多項係数は1です。

仕事

m個の数値、k 1k 2、...、k mを取り、対応する多項係数を出力または返すプログラムまたは関数を作成します。プログラムでは、必要に応じて、オプションでmを追加の引数として使用できます。

  • これらの数値は、コード化プロセスではなくコードによって多項係数の実際の計算が実行される限り、任意の形式で入力できます。たとえば、リストにグループ化するか、単項でエンコードするなどです。

  • 多項係数が奇数の場合、出力は任意の真理値、多項係数が偶数の場合は偽値となります。

  • 多項係数を計算するために設計された組み込み関数は使用できません。

  • 標準の抜け穴が適用されます。

得点

これはコードゴルフです。バイト単位の最短ソリューションが勝ちです。

例:

7、16、および1000の多項係数を見つけるために、それぞれをバイナリ展開します。

ここに画像の説明を入力してください

1つ以上の列を持つ列はないので、多項係数は奇数であり、したがって、何らかの真実を出力する必要があります。

7、16、および76の多項係数を見つけるために、それぞれをバイナリ展開します。

ここに画像の説明を入力してください

76と7の2進展開には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ヨハンセン

@ØrjanJohansenそれはいいですね。
フッド

回答:






2

Japt、6バイト

pizzapants184およびLeaky Nunのソリューションの別のポート。

x ¶Ur|

試して


技術的には、pizzapants184が私より14秒早く回答しました...
Nun

2

JavaScript(ES6)、37 35 34バイト

@ Mr.Xcoderのおかげで2バイト
節約@ETHproductionsのおかげで1バイト節約

(のようなビット単位で合計を比較OR pizzapants184及び漏洩修道女がやった)である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秒早く回答しました...
Nun

-1バイト:a=>(q=c=>eval(a.join(c)))`|`==q`+`;
ETHproductions

@ETHproductionsいいね!これはNode.jsで正常に機能します。しかし、あなたはそれをブラウザで動作させることができましたか?
アーナウド

Firefox 57で問題なく動作します。エラーが表示されますか、それとも正常に動作しませんか?
ETHproductions

@ETHproductions実際、はい、機能します。repl.itで失敗するだけです。
アーナウド

2

Haskell、38バイト

(==).sum<*>foldl1 xorは、を返す匿名関数Boolです。として使用し((==).sum<*>foldl1 xor) [2,0,1]ます。

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

オンラインでお試しください!

  • Haskell演算子名を使用するxor(.|.)(bitwise or)の代わりに(bitwise )を使用するために1バイト節約されることを除いて、pizzapants184とLeaky Nunによるだれもが使用するトリックとほとんど同じです。

  • (==).sum<*>foldl1 xorはのポイントフリーバージョンです\l->sum l==foldl1 xor l


2

Java 8、53バイト

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

@LeakyNunのJelly回答のポート。

説明:

ここで試してみてください。

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

1偽物の出力、偽物の出力はありません。pizzapants184 / Leaky Nunのアルゴリズムのもう1つの明らかなポート。


0

J、10バイト

+/=+./&.#:

さらに別のpizzapants184およびLeaky Nunのソリューションのポート。

使い方?

+/.&.#: -数値をバイナリに変換し、ビット単位または2のべき乗を適用し、バイナリから10進数に逆変換します

+/ -加算により入力を減らします

= -上記は等しいですか?

オンラインでお試しください!

簡単な代替

J、12バイト

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

使い方?

+/@#: -各数値をバイナリに変換し、各2の累乗の合計を求めます

>./ -最大値を見つける

2>-2未満ですか?->真実

オンラインでお試しください!


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.