受A014486的启发。
挑战
给定以10为底的整数输入,构造一个与输入对应的二进制森林的表示形式。表示形式包括但不限于嵌套数组和字符串。
怎么样?
将输入转换为二进制。1
s代表分支,0
s代表叶子。
为了使它更容易理解,我们以834
(二进制的1101000010)为例。
我们从第一个数字开始。第一位数字是1
,因此我们绘制分支:
\ / 1个
或作为数组, {{1}}
下一个数字是1
,因此我们绘制了更多分支(从左到右):
\ / 1个 \ / 1个
或作为数组, {{1, {1}}}
下一位数字是0
,因此我们放置了一片叶子:
0 \ / 1个 \ / 1个
或作为数组, {{1, {1, 0}}}
下一个数字是1
,因此我们放置一个分支:
\ / 0 1 \ / 1个 \ / 1个
或作为数组, {{1, {1, 0, {1}}}}
重复此过程,我们在第8位数字之后获得以下树:
0 0 \ / 0 1 \ / 1 0 \ / 1个
或作为数组, {{1, {1, 0, {1, 0, 0}}, 0}}
对于其余的数字,我们绘制更多的树:
第9位数字是0
,因此我们放置了一片叶子(哇,这是嫩芽!)
0 0 \ / 0 1 \ / 1 0 \ / 1 0
或作为数组, {{1, {1, 0, {1, 0, 0}}, 0}, 0}
当我们使用所有数字时,我们最终得到:
0 0 \ / 0 1 \ / 1 0 0 \ / \ / 1 0 1
或作为数组, {{1, {1, 0, {1, 0, 0}}, 0}, 0, {1, 0}}
看起来很奇怪,所以我们填充零以完成树:
0 0 \ / 0 1 \ / 1 0 0 0 \ / \ / 1 0 1
或作为数组, {{1, {1, 0, {1, 0, 0}}, 0}, 0, {1, 0, 0}}
请注意,将数组展平会产生二进制的原始数字,但填充了零。
标准
- 输出必须清楚地显示树和分支的分隔(如果它不是嵌套数组,请解释您的输出格式)。
- 从输出中提取所有数字必须与输入的二进制表示相同(带有上述过程中填充的零)。
测试用例
只要符合条件,输出可能会有所不同。
0-> {0} 1-> {{1,0,0}} 44-> {{1,0,{1,{1,0,0},0}}} 63-> {{1,{1,{1,{1,{1,{1,0,0},0},0},0},0},0}} 404-> {{1,{1,0,0},{1,0,{1,0,0}}}} 1337-> {{1,0,{1,0,0}},{1,{1,{1,0,0},{1,0,0}},0}}
计分
这是代码高尔夫球,因此最低字节为准!