Эта проблема была вдохновлена вопросом о 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],[]]