Sie müssen ein Programm oder eine Funktion schreiben, die eine verschachtelte Liste sortiert. Hier sind die Regeln zum Sortieren einer verschachtelten Liste:
Nehmen wir diese Liste als Beispiel:
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Jedes Element in dieser Liste hat eine "Priorität". Ein Element zählt als Zahl oder als Unterliste. Holen Sie sich zunächst die Priorität jedes Elements in der gleichen Tiefe. Wenn ein Element nur eine Zahl ist, entspricht seine Priorität der Zahl selbst. Wenn ein Element eine Unterliste ist, ist seine Priorität die Summe aller darin enthaltenen Zahlen , ohne Unterlisten.
Die Prioritäten aller Elemente von Tiefe 1 lauten also:
( 7 ) 2 7 ( 3 ) 9
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Sortieren Sie jedes Element nach Priorität. Bei Stimmengleichheit müssen Sie die Reihenfolge der ursprünglichen Liste beibehalten.
2 ( 3 ) ( 7 ) 7 9
(2, (2, 1, (3, 4)), (5, 2), 7, 9)
Wiederholen Sie dies für jede Unterliste. Also auf dieser Unterliste
(2, 1, (3, 4))
Unsere Prioritäten sehen so aus:
2 1 ( 7 )
(2, 1, (3, 4))
So sortiert sieht es aus:
(1, 2, (3, 4))
(3, 4)
ist schon sortiert, also sind wir fertig. Wiederholen Sie für (5, 2)
welche Ergebnisse (2, 5)
und wir sind fertig! Unsere endgültige Liste ist:
(2, (1, 2, (3, 4)), (2, 5), 7, 9)
Regeln:
Sehr zweifelhaft, aber für den Fall, dass Mathematica etwas dafür hat, sind keine eingebauten Sortierfunktionen für verschachtelte Listen zulässig. Reguläre Sortierfunktionen sind erlaubt.
I / O kann in jedem vernünftigen Format vorliegen.
Jede Unterliste enthält mindestens eine Nummer oder Liste. Unterlisten können auch mehrere Ebenen tief verschachtelt werden. Zum Beispiel in
(1, 2, (((3))))
der(((3)))
hat eine Priorität von 0, da es nur Teil - Listen in ihm hat.Ungültige Listen (nicht übereinstimmende Klammern, Nicht-Zahlen, falsche Klammertypen, negative Zahlen usw.) führen zu undefiniertem Verhalten.
Test 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))
Kürzeste Antwort in Bytes gewinnt.