Вы должны написать программу или функцию, которая сортирует вложенный список. Вот правила сортировки вложенного списка:
Давайте возьмем этот список в качестве примера:
((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 есть что-то для этого, встроенные функции сортировки вложенных списков не допускаются. Регулярные функции сортировки будут разрешены.
Ввод / вывод может быть в любом разумном формате.
Каждый подсписок будет содержать хотя бы один номер или список. Кроме того, подсписки могут быть вложены в несколько уровней. Например, в имеет приоритет 0, так как она имеет только подсписки в нем.
(1, 2, (((3))))
(((3)))
Неверные списки (несоответствующие скобки, не числа, неправильные типы скобок, отрицательные числа и т. Д.) Приводят к неопределенному поведению.
Тестовый ввод / вывод:
(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))
Кратчайший ответ в байтах побеждает.