Vous devez écrire un programme ou une fonction qui trie une liste imbriquée. Voici les règles de tri d'une liste imbriquée:
Prenons cette liste comme exemple:
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Chaque élément de cette liste a une "priorité". Un élément compte comme un nombre ou une sous-liste. Tout d'abord, obtenez la priorité de chaque élément à la même profondeur. Si un élément n'est qu'un nombre, sa priorité est la même que le nombre lui-même. Si un élément est une sous-liste, sa priorité est la somme de tous les nombres qu'il contient, à l'exclusion des sous-sous-listes.
Ainsi, les priorités de tous les éléments de profondeur 1 sont:
( 7 ) 2 7 ( 3 ) 9
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Triez chaque élément par priorité. S'il y a égalité, vous devez conserver le même ordre que la liste d'origine.
2 ( 3 ) ( 7 ) 7 9
(2, (2, 1, (3, 4)), (5, 2), 7, 9)
Répétez l'opération pour chaque sous-liste. Donc sur cette sous-liste
(2, 1, (3, 4))
Nos priorités ressemblent à:
2 1 ( 7 )
(2, 1, (3, 4))
Ainsi trié, il ressemble à:
(1, 2, (3, 4))
(3, 4)
est déjà trié, nous avons donc terminé. Répétez l'opération pour les (5, 2)
résultats (2, 5)
et nous avons terminé! Notre liste finale est:
(2, (1, 2, (3, 4)), (2, 5), 7, 9)
Règles:
Très douteux, mais juste au cas où Mathematica aurait quelque chose pour cela, aucune intégration de tri de liste imbriquée n'est autorisée. Les fonctions de tri régulières sont autorisées.
Les E / S peuvent être dans n'importe quel format raisonnable.
Chaque sous-liste contiendra au moins un numéro ou une liste. De plus, les sous-listes peuvent être imbriquées à plusieurs niveaux. Par exemple, dans
(1, 2, (((3))))
le(((3)))
a une priorité de 0, car il ne contient que des sous-listes.Les listes non valides (parenthèses sans correspondance, non-nombres, types de parenthèses incorrects, nombres négatifs, etc.) entraînent un comportement indéfini.
Tester les E / S:
(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))
La réponse la plus courte en octets gagne.