...申し訳ありませんが、ポップコーンはありません。POPCNTだけです。
数値を取り込み、0から2 n -1 までのすべての整数を、数値のバイナリ表現(popcount)の1ビットの数値の昇順で出力する最短のプログラムまたは関数を記述します。重複は許可されません。n
同じポップカウントを持つ数字の順序は実装定義です。
たとえば、の場合n = 3
、これらの出力はすべて有効です。
0, 1, 2, 4, 3, 5, 6, 7
[0, 4, 1, 2, 5, 3, 6, 7]
0 4 2 1 6 5 3 7
入力および出力形式は、言語機能を使用してコードをさらに学習できるように実装定義されています。出力にはいくつかの制限があります。
- 数値は10進形式で出力する必要があります。
出力には、数字の間に適切な区切り文字が含まれている必要があります(末尾の区切り文字は使用できますが、先頭には使用できません)。
ラインフィード(
\n
)、タブ(\t
)、スペース、,
、.
、;
、|
、-
、_
、/
非常に合理的セパレーターです。きれいに印刷するために追加のスペースを気にしませんが、区切り文字として文字や数字を使用しません。- 数字と区切り記号は
[ ]
、{ }
または任意の配列表記またはリスト表記で囲むことができます。 - 上記以外の内容は印刷しないでください。
ボーナス
ソリューションがその場で数を生成できる場合は、スコアに0.5を掛けます。このボーナスの精神は、印刷ソリューションをジェネレーターに直接変換する場合、ジェネレーターは最大でO(n)メモリのみを使用することです(nは上記で定義されたビット数です)。(実際にソリューションをジェネレーターに変換する必要はありません)。n <= 28を課している間、すべての数値を格納するために必要なメモリは指数関数的に増加し、単純なソートソリューションはn = 28で少なくとも4 GBのメモリを占有することに注意してください。
このボーナスを請求する前に、ソリューションの仕組みに関する簡単な説明を追加してください。