通常、係数を2のべき乗で割り当てることにより、数値を2進数に分解します。
0
1
します。各項のまたはです。
25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1
選択
0
とは1
非常にバイナリではない...です。2の累乗で拡張することにより真のバイナリ拡張を実行しますが、係数は1
か、-1
代わりに:
25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1
今、これはバイナリになります。
正の数が与えられた場合、次のことを確認することは簡単です。
- すべての奇数には、無限に多くの真のバイナリ展開があります
- すべての偶数には真のバイナリ展開はありません
したがって、真のバイナリ展開を明確に定義するには、展開を最小にする、つまり最短にする必要があります。
正の奇数の整数を指定するn
と、最上位の桁から最下位の桁まで(または逆の順序で)、その真のバイナリ展開を返します。
ルール:
- これはcode-golfであるため、可能な限り短いバイト数でこれを行うことを目指す必要があります。ビルトインは許可されています。
- 係数を表してリストできる出力であればどれでも許容されます:配列、セパレータ付きの係数の文字列など...
- 標準のゴルフ抜け穴が適用されます。
- プログラムは、言語の標準整数サイズ内の値で動作するはずです。
テストケース
25 -> [1,1,1,-1,-1]
47 -> [1,1,-1,1,1,1]
1 -> [1]
3 -> [1,1]
1234567 -> [1,1,-1,-1,1,-1,1,1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,1,1]
0
代わりに印刷する場合は、私のせいではありません-1
。ビットを受け取った発信者は、その意味を知っています。(32ビットの有効ビットがある場合にのみ右回転が機能するため、これは重要なビット操作です。たとえば、5ビットの数値には5の回転幅が必要です。)
111-1-1
ため、有効な出力25
?