Ce défi a été inspiré par une question sur Mathematica.SE .
Supposons que vous ayez une liste / un tableau imbriqué de structure quelconque (les listes à chaque niveau n'ont pas nécessairement la même longueur). Pour simplifier, supposons que les nœuds sont des entiers non négatifs ou des tableaux vides. Par exemple
[[[1, 3], 2], [1, 4], 12, [[0, [], 0], [5, [7]]]]
Il est parfois plus pratique d’aplatir cette liste pour manipuler les nœuds, par exemple:
--> [1, 3, 2, 1, 4, 12, 0, 0, 5, 7]
--> [1, 1, 0, 1, 0, 0, 0, 0, 1, 1]
Mais à la fin, vous voulez réellement conserver la structure originale, donc vous voulez le transformer en
--> [[[1, 1], 0], [1, 0], 0, [[0, [], 0], [1, [1]]]
Votre tâche consiste à effectuer cette dernière étape.
À partir d’une liste imbriquée d’entiers non négatifs arbitraires, qui représente la structure souhaitée du résultat, et d’une liste à plat d’entiers non négatifs, qui représentent les valeurs souhaitées, remodelez la liste à plat sous la forme de la liste structurée. Vous pouvez supposer que les deux listes contiennent le même nombre d'entiers.
Comme d'habitude, vous n'avez pas à traiter d'entrées non valides (par exemple, la deuxième liste n'est pas plate, l'entrée est syntaxiquement mal formée, ne contient pas de nombres entiers comme nœuds, etc.). Vous pouvez modifier les tableaux d'entrée dans votre code.
Vous pouvez écrire une fonction ou un programme en prenant une entrée via STDIN, un argument de ligne de commande ou un argument de fonction, et vous pouvez renvoyer le résultat ou l’imprimer sur STDOUT. Vous pouvez utiliser n’importe quel format commode de liste ou de chaîne pour représenter les entrées et les sorties (tant que le format est sans ambiguïté et que l’entrée n’est pas prétraitée). De plus, le format des deux entrées doit être cohérent (vous ne pouvez donc pas prendre une entrée sous forme de chaîne et l'autre sous forme de liste, par exemple). Vous pouvez prendre les listes de saisie dans l’un ou l’autre des ordres, mais veuillez spécifier le mode de saisie exact dans votre réponse.
Encore une restriction: vous ne devez pas utiliser d'expressions régulières. C'est un défi de manipulation de tableau, pas un défi de manipulation de chaîne.
C'est le code de golf, donc la réponse la plus courte (en octets) gagne.
Cas de 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],[]]