ネストされたリストをソートするプログラムまたは関数を作成する必要があります。ネストされたリストをソートするためのルールは次のとおりです。
このリストを例としてみましょう:
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
このリストの各要素には「優先度」があります。要素は、数値またはサブリストとしてカウントされます。最初に、同じ深さで各要素の優先度を取得します。要素が単なる数字である場合、その優先順位は数字自体と同じです。要素がサブリストの場合、その優先順位はサブサブリストを含まず、その中のすべての数字の合計です。
したがって、深さ1のすべての要素の優先順位は次のとおりです。
( 7 ) 2 7 ( 3 ) 9
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
各要素を優先度順に並べ替えます。同点がある場合は、元のリストと同じ順序を維持する必要があります。
2 ( 3 ) ( 7 ) 7 9
(2, (2, 1, (3, 4)), (5, 2), 7, 9)
すべてのサブリストについて繰り返します。このサブリストで
(2, 1, (3, 4))
優先順位は次のようになります。
2 1 ( 7 )
(2, 1, (3, 4))
ソートされているため、次のようになります。
(1, 2, (3, 4))
(3, 4)
ソート済みなので、完了です。(5, 2)
結果が出るまで繰り返して、(2, 5)
完了です!最終リストは次のとおりです。
(2, (1, 2, (3, 4)), (2, 5), 7, 9)
ルール:
非常に疑わしいですが、Mathematicaがこのために何かを持っている場合、ネストされたリストのソート組み込みは許可されていません。通常のソート機能が許可されています。
I / Oは、妥当な形式であれば何でもかまいません。
すべてのサブリストには、少なくとも1つの番号またはリストが含まれます。また、サブリストは、いくつかのレベルの深さにネストできます。たとえば、に
(1, 2, (((3))))
は(((3)))
サブリストのみがあるため、優先度は0です。無効なリスト(括弧の不一致、非数値、間違った括弧タイプ、負の数値など)は、未定義の動作を引き起こします。
テストI / O:
(1, 2, 3) ---> (1, 2, 3)
(1, 2, 6, 3, 9, 8) ---> (1, 2, 3, 6, 8, 9)
(4, 3, (2), (1)) ---> ((1), (2), 3, 4)
(4, 3, (2), ((1))) ---> (((1)), (2), 3, 4)
(5, (1, 2, (9, 8))) ---> ((1, 2, (8, 9)), 5)
(3, (1, 2), (2, 1)) ---> (3, (1, 2), (1, 2))
(3, (1, 2, (99)), (2, 1, (34))) ---> (3, (1, 2, (99)), (1, 2, (34)))
(7, 2, (1, (9, 12)), (4, 3, 2, (1, 2))) ---> ((1, (9, 12)), 2, 7, (2, 3, (1, 2), 4))
バイト単位の最短回答が優先されます。