...抱歉,这里没有爆米花,只有POPCNT。
编写最短的程序或函数,该程序或函数接受一个数字,n
并以数字的二进制表示形式(popcount)以1位数字的升序输出从0到2 n -1的所有整数。不允许重复。
具有相同popcount的数字的顺序是实现定义的。
例如,对于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
输入和输出格式是实现定义的,以允许使用语言功能进一步修改代码。对输出有一些限制:
- 数字必须以十进制格式输出。
输出必须在数字之间包含合理的分隔符(允许使用尾随分隔符,但不能使用前导符)。
换行(
\n
),标签(\t
),空间,
,.
,;
,|
,-
,_
,/
是相当合理的分隔符。我不介意额外的空格来进行漂亮的打印,但不要使用字母或数字作为分隔符。- 中的数字和隔板可以通过包围
[ ]
,{ }
或任何数组或列表符号。 - 不要打印上面没有提到的其他内容。
奖金
如果您的解决方案可以即时生成数字,则将您的分数乘以0.5。这种好处的实质是,如果您要将打印解决方案直接转换为生成器,则生成器最多仅使用O(n)内存,其中n是如上定义的位数。(您不必实际将解决方案转换为生成器)。请注意,尽管我施加n <= 28,但存储所有数字所需的内存仍呈指数增长,并且一个幼稚的排序解决方案将在n = 28时占用至少4 GB的内存。
在申请此奖金之前,请添加一些关于您的解决方案工作原理的简单说明。