Ви повинні написати програму або функцію, яка сортує вкладений список. Ось правила сортування вкладеного списку:
Візьмемо цей список як приклад:
((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))
Найкоротша відповідь у байтах виграє.