Esse desafio foi inspirado por uma pergunta no Mathematica.SE .
Digamos que você tenha uma lista / matriz aninhada de alguma estrutura arbitrária (as listas em cada nível não necessariamente têm o mesmo comprimento). Para simplificar, assumiremos que os nós são números inteiros não negativos ou matrizes vazias. Como um exemplo
[[[1, 3], 2], [1, 4], 12, [[0, [], 0], [5, [7]]]]
Às vezes, é mais conveniente achatar essa lista para executar alguma manipulação dos nós, por exemplo
--> [1, 3, 2, 1, 4, 12, 0, 0, 5, 7]
--> [1, 1, 0, 1, 0, 0, 0, 0, 1, 1]
Mas, no final, você realmente deseja preservar a estrutura original, portanto, deseja transformar isso novamente em
--> [[[1, 1], 0], [1, 0], 0, [[0, [], 0], [1, [1]]]
Sua tarefa é executar o último passo.
Dada uma lista aninhada de números inteiros não negativos arbitrários, que representa a estrutura desejada do resultado, e uma lista simples de números inteiros não negativos, que representam os valores desejados, reformula a lista simples na forma da lista estruturada. Você pode assumir que ambas as listas contêm o mesmo número de números inteiros.
Como de costume, você não precisa lidar com entradas inválidas (por exemplo, a segunda lista não é plana, a entrada está sintaticamente malformada, não possui números inteiros como nós, etc.). Você pode modificar as matrizes de entrada no seu código.
Você pode escrever uma função ou programa, recebendo entradas via STDIN, argumento de linha de comando ou argumento de função, e pode retornar o resultado ou imprimi-lo em STDOUT. Você pode usar qualquer formato conveniente de lista ou sequência para representar entrada e saída (desde que o formato seja inequívoco e a entrada não seja pré-processada). Além disso, o formato de ambas as entradas precisa ser consistente (para que você não possa considerar uma entrada como uma string e a outra como uma lista, por exemplo). Você pode acessar as listas de entrada em qualquer ordem, mas especifique o método exato de entrada em sua resposta.
Mais uma restrição: você não deve usar expressões regulares. Este é um desafio de manipulação de array, não um desafio de manipulação de string.
Isso é código de golfe, então a resposta mais curta (em bytes) vence.
Casos de teste
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],[]]