Este desafío fue inspirado por una pregunta en Mathematica.SE .
Digamos que tiene una lista / matriz anidada de alguna estructura arbitraria (las listas en cada nivel no necesariamente tienen la misma longitud). Para simplificar, asumiremos que los nodos son enteros no negativos o matrices vacías. Como ejemplo
[[[1, 3], 2], [1, 4], 12, [[0, [], 0], [5, [7]]]]
A veces es más conveniente aplanar esa lista para realizar alguna manipulación de los nodos, p. Ej.
--> [1, 3, 2, 1, 4, 12, 0, 0, 5, 7]
--> [1, 1, 0, 1, 0, 0, 0, 0, 1, 1]
Pero al final, realmente desea preservar la estructura original, por lo que desea volver a convertir esto en
--> [[[1, 1], 0], [1, 0], 0, [[0, [], 0], [1, [1]]]
Su tarea es realizar ese último paso.
Dada una lista anidada de enteros no negativos arbitrarios, que representa la estructura deseada del resultado, y una lista plana de enteros no negativos, que representan los valores deseados, reconfigura la lista plana en la forma de la lista estructurada. Puede suponer que ambas listas contienen el mismo número de enteros.
Como de costumbre, no tiene que lidiar con entradas no válidas (por ejemplo, la segunda lista no es plana, la entrada tiene una forma sintáctica incorrecta, no tiene enteros como nodos, etc.) Puede modificar las matrices de entrada en su código.
Puede escribir una función o programa, tomando datos a través de STDIN, argumento de línea de comando o argumento de función, y puede devolver el resultado o imprimirlo en STDOUT. Puede usar cualquier formato conveniente de lista o cadena para representar la entrada y la salida (siempre que el formato no sea ambiguo y la entrada no esté preprocesada). Además, el formato de ambas entradas debe ser coherente (por lo que no puede tomar una entrada como una cadena y la otra como una lista, por ejemplo). Puede tomar las listas de entrada en cualquier orden, pero especifique el método de entrada exacto en su respuesta.
Una restricción más: no debes usar expresiones regulares. Este es un desafío de manipulación de matriz, no un desafío de manipulación de cadenas.
Este es el código de golf, por lo que gana la respuesta más corta (en bytes).
Casos de prueba
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],[]]