Musisz napisać program lub funkcję sortującą listę zagnieżdżoną. Oto zasady sortowania listy zagnieżdżonej:
Weźmy tę listę jako przykład:
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Każdy element na tej liście ma „priorytet”. Element liczy się jako liczba lub lista podrzędna. Najpierw uzyskaj priorytet każdego elementu na tej samej głębokości. Jeśli element jest tylko liczbą, jego priorytet jest taki sam jak sama liczba. Jeśli element jest podlistą, jego priorytetem jest suma wszystkich zawartych w nim liczb , nie uwzględniając żadnych podlist.
Zatem priorytetami wszystkich elementów głębokości 1 są:
( 7 ) 2 7 ( 3 ) 9
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Posortuj każdy element według priorytetu. W przypadku remisu musisz zachować tę samą kolejność, co oryginalną listę.
2 ( 3 ) ( 7 ) 7 9
(2, (2, 1, (3, 4)), (5, 2), 7, 9)
Powtórz dla każdej podlisty. Więc na tej liście
(2, 1, (3, 4))
Nasze priorytety wyglądają następująco:
2 1 ( 7 )
(2, 1, (3, 4))
Tak posortowane, wygląda następująco:
(1, 2, (3, 4))
(3, 4)
jest już posortowane, więc skończyliśmy. Powtórz dla (5, 2)
których wyniki (2, 5)
i gotowe! Nasza ostateczna lista to:
(2, (1, 2, (3, 4)), (2, 5), 7, 9)
Zasady:
Bardzo wątpliwe, ale na wszelki wypadek, gdy Mathematica ma coś do tego, żadne wbudowane sortowanie listy zagnieżdżonej nie jest dozwolone. Dozwolone są regularne funkcje sortowania .
I / O może mieć dowolny rozsądny format.
Każda lista podrzędna będzie zawierać co najmniej jeden numer lub listę. Podlisty można również zagnieżdżać na kilku poziomach. Na przykład w
(1, 2, (((3))))
elemencie(((3)))
ma priorytet 0, ponieważ ma w nim tylko listy podrzędne.Nieprawidłowe listy (niedopasowane nawiasy, niepoliczalne liczby, niewłaściwe typy nawiasów, liczby ujemne itp.) Powodują niezdefiniowane zachowanie.
Test we / wy:
(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))
Najkrótsza odpowiedź w bajtach wygrywa.