Debe escribir un programa o función que clasifique una lista anidada. Estas son las reglas para ordenar una lista anidada:
Tomemos esta lista como ejemplo:
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Cada elemento en esta lista tiene una "prioridad". Un elemento cuenta como un número o una sublista. Primero, obtenga la prioridad de cada elemento a la misma profundidad. Si un elemento es solo un número, su prioridad es la misma que el número mismo. Si un elemento es una sublista, su prioridad es la suma de todos los números que contiene, sin incluir ninguna sublista.
Entonces, las prioridades de todos los elementos de la profundidad 1 son:
( 7 ) 2 7 ( 3 ) 9
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Ordenar cada elemento por prioridad. Si hay un empate, debe mantener el mismo orden que la lista original.
2 ( 3 ) ( 7 ) 7 9
(2, (2, 1, (3, 4)), (5, 2), 7, 9)
Repita para cada sublista. Entonces en esta sublista
(2, 1, (3, 4))
Nuestras prioridades se ven así:
2 1 ( 7 )
(2, 1, (3, 4))
Así ordenado, se ve así:
(1, 2, (3, 4))
(3, 4)
ya está ordenado, así que hemos terminado. Repita para (5, 2)
que resultados (2, 5)
y hemos terminado! Nuestra lista final es:
(2, (1, 2, (3, 4)), (2, 5), 7, 9)
Reglas:
Muy dudoso, pero solo en caso de que Mathematica tenga algo para esto, no se permite la creación de listas anidadas. Funciones de ordenación regulares están permitidos.
Las E / S pueden estar en cualquier formato razonable.
Cada sublista contendrá al menos un número o lista. Además, las sublistas se pueden anidar en varios niveles de profundidad. Por ejemplo, en
(1, 2, (((3))))
el(((3)))
tiene una prioridad de 0, ya que sólo tiene sublistas en ella.Las listas no válidas (paréntesis no coincidentes, no números, tipos de paréntesis incorrectos, números negativos, etc.) dan como resultado un comportamiento indefinido.
Prueba de 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 respuesta más corta en bytes gana.