给定正整数k > 1
和非负整数i
,生成非负整数的k
-tuple(或- k
维向量)。对于每一个k
,从ℕ到ℕ地图ķ,必须是双射。也就是说,每个输入i
应产生一个不同的元组,并且每个可能的元组必须由某个输入产生i
。
您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行参数或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。
您可以对输出使用任何方便,明确的平面列表格式。
您的解决方案不应施加任何人为限制k
,i
但您可以假定它们适合您语言的本机整数大小。至少,您必须支持最大为的值255
,即使您的本机整数大小也要小于该值。
对于any 1 < k < 32
,您的代码应该会在几秒钟内产生一个结果(当然,如果您的答案由于先前的规则而不能支持那么大,则会相应地调整限制)。这应该是没有问题的:它可能解决这一难题,使得它的作品多达2 128在几秒钟,但上限是存在的,以避免回答这实际上从迭代来找到结果。i < 231
i
0
i
请在您的答案中包括对所选映射的描述,以及为什么该映射是双射的(这不需要是正式证明)。
这是代码高尔夫球,最短的答案(以字节为单位)获胜。
q~2bW%1$Te]/zWf%2fbp
相反的输入顺序)