Questa sfida è stata ispirata da una domanda su Mathematica.SE .
Supponi di avere una lista / matrice nidificata di una struttura arbitraria (le liste di ogni livello non hanno necessariamente la stessa lunghezza). Per semplicità, supponiamo che i nodi siano numeri interi non negativi o array vuoti. Come esempio
[[[1, 3], 2], [1, 4], 12, [[0, [], 0], [5, [7]]]]
A volte è più conveniente appiattire tale elenco per eseguire alcune manipolazioni dei nodi, ad es
--> [1, 3, 2, 1, 4, 12, 0, 0, 5, 7]
--> [1, 1, 0, 1, 0, 0, 0, 0, 1, 1]
Ma alla fine vuoi davvero preservare la struttura originale, quindi vuoi trasformarla in
--> [[[1, 1], 0], [1, 0], 0, [[0, [], 0], [1, [1]]]
Il tuo compito è eseguire l'ultimo passaggio.
Dato un elenco nidificato di numeri interi non negativi arbitrari, che rappresenta la struttura desiderata del risultato, e un elenco piano di numeri interi non negativi, che rappresentano i valori desiderati, rimodella l'elenco piano nella forma dell'elenco strutturato. Si può presumere che entrambi gli elenchi contengano lo stesso numero di numeri interi.
Come al solito, non è necessario gestire input non validi (ad es. Il secondo elenco non è piatto, l'input è sintatticamente malformato, non ha numeri interi come nodi, ecc.). È possibile modificare gli array di input nel proprio codice.
È possibile scrivere una funzione o un programma, prendendo input tramite STDIN, argomento della riga di comando o argomento della funzione, e si può restituire il risultato o stamparlo su STDOUT. È possibile utilizzare qualsiasi elenco o formato stringa conveniente per rappresentare l'input e l'output (purché il formato non sia ambiguo e l'input non sia preelaborato). Inoltre, il formato di entrambi gli input deve essere coerente (quindi non è possibile accettare un input come stringa e l'altro come elenco, ad esempio). Puoi prendere gli elenchi di input in entrambi gli ordini, ma specifica il metodo di input esatto nella tua risposta.
Un'altra limitazione: non devi usare espressioni regolari. Questa è una sfida di manipolazione di array, non una sfida di manipolazione di stringhe.
Questo è il golf del codice, quindi vince la risposta più breve (in byte).
Casi test
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],[]]