Você deve escrever um programa ou função que classifique uma lista aninhada. Aqui estão as regras para classificar uma lista aninhada:
Vamos tomar esta lista como um exemplo:
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Cada elemento nesta lista tem uma "prioridade". Um elemento conta como um número ou uma sub-lista. Primeiro, obtenha a prioridade de cada elemento na mesma profundidade. Se um elemento é apenas um número, sua prioridade é a mesma que o próprio número. Se um elemento é uma sub- lista, sua prioridade é a soma de todos os números , sem incluir nenhuma sub-sublista.
Portanto, as prioridades de todos os elementos da profundidade 1 são:
( 7 ) 2 7 ( 3 ) 9
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Classifique cada elemento por prioridade. Se houver um empate, você deve manter a mesma ordem que a lista original.
2 ( 3 ) ( 7 ) 7 9
(2, (2, 1, (3, 4)), (5, 2), 7, 9)
Repita para todas as sub-listas. Então nesta sublist
(2, 1, (3, 4))
Nossas prioridades se parecem com:
2 1 ( 7 )
(2, 1, (3, 4))
Tão ordenados, parece com:
(1, 2, (3, 4))
(3, 4)
já está classificado, então terminamos. Repita para (5, 2)
que resultados (2, 5)
e pronto! Nossa lista final é:
(2, (1, 2, (3, 4)), (2, 5), 7, 9)
Regras:
Altamente duvidoso, mas, no caso de o Mathematica ter algo para isso, não é permitido nenhum built-in de classificação de lista aninhada. Funções de classificação regulares são permitidas.
A E / S pode estar em qualquer formato razoável.
Cada sublist conterá pelo menos um número ou lista. Além disso, sublistas podem ser aninhados em vários níveis de profundidade. Por exemplo,
(1, 2, (((3))))
na(((3)))
tem uma prioridade de 0, uma vez que tem apenas sublists nele.Listas inválidas (parênteses não correspondentes, não números, tipos de colchetes incorretos, números negativos, etc.) resultam em comportamento indefinido.
E / S de teste:
(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))
A resposta mais curta em bytes vence.