この課題は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]]]
あなたの仕事は、その最後のステップを実行することです。
結果の目的の構造を表す任意の非負整数のネストされたリストと、目的の値を表す非負整数のフラットリストが与えられた場合、フラットリストを構造化リストの形式に変更します。両方のリストに同じ数の整数が含まれていると想定できます。
いつものように、無効な入力を処理する必要はありません(たとえば、2番目のリストがフラットではない、入力が構文的に不正である、ノードとして整数がないなど)。コード内の入力配列を変更できます。
STDIN、コマンドライン引数、または関数引数を介して入力を取り、関数またはプログラムを作成し、結果を返すか、STDOUTに出力できます。便利なリスト形式または文字列形式を使用して、入力と出力を表すことができます(形式が明確で、入力が前処理されていない限り)。また、両方の入力の形式は一貫している必要があります(たとえば、一方の入力を文字列として、もう一方の入力をリストとして使用することはできません)。入力リストはどちらの順序でも取得できますが、回答に正確な入力方法を指定してください。
もう1つの制限:正規表現を使用しないでください。これは配列操作の課題であり、文字列操作の課題ではありません。
これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。
テストケース
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],[]]