这个挑战是由有关Mathematica.SE的一个问题引起的。
假设您有一些任意结构的嵌套列表/数组(每个级别的列表不一定具有相同的长度)。为简单起见,我们假设节点是非负整数或空数组。举个例子
[[[1, 3], 2], [1, 4], 12, [[0, [], 0], [5, [7]]]]
有时,将列表展平以对节点执行一些操作更为方便,例如
--> [1, 3, 2, 1, 4, 12, 0, 0, 5, 7]
--> [1, 1, 0, 1, 0, 0, 0, 0, 1, 1]
但是最后,您实际上想要保留原始结构,因此您想将其转换为
--> [[[1, 1], 0], [1, 0], 0, [[0, [], 0], [1, [1]]]
您的任务是执行最后一步。
给定一个嵌套的任意非负整数的列表(表示结果的所需结构),以及一个非负整数的平面列表(表示所需的值),将平面列表重新构造为结构化列表的形式。您可以假定两个列表都包含相同数量的整数。
像往常一样,您不必处理无效的输入(例如,第二个列表不是平坦的,输入在语法上是不正确的,没有整数作为节点,等等)。您可以在代码中修改输入数组。
您可以编写函数或程序,通过STDIN,命令行参数或函数参数获取输入,还可以返回结果或将结果打印到STDOUT。您可以使用任何方便的列表或字符串格式来表示输入和输出(只要格式是明确的并且输入未经预处理)。另外,两个输入的格式必须一致(例如,您不能将一个输入作为字符串,而将另一个输入作为列表)。您可以按照任何顺序输入列表,但是请在答案中指定确切的输入方法。
另一个限制:不得使用正则表达式。这是一个数组操作挑战,而不是字符串操作挑战。
这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。
测试用例
Structure Values Result
[[[1,3],2],[1,4],12,[[0,0],[5,[7]]]] [1,1,0,1,0,0,0,0,1,1] [[[1,1],0],[1,0],0,[[0,0],[1,[1]]]]
[[[0,0],0],[0,0],0,[[0,0],[0,[0]]]] [1,1,0,1,0,0,0,0,1,1] [[[1,1],0],[1,0],0,[[0,0],[1,[1]]]]
[] [] []
[[]] [] [[]]
[0,1,2,3] [5,1,0,5] [5,1,0,5]
[[[[[0]]]]] [123] [[[[[123]]]]]
[0,[1,[]],[[]],[2,3],[]] [1,6,1,8] [1,[6,[]],[[]],[1,8],[]]