È necessario scrivere un programma o una funzione che ordina un elenco nidificato. Ecco le regole per ordinare un elenco nidificato:
Prendiamo questo elenco come esempio:
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Ogni elemento in questo elenco ha una "priorità". Un elemento conta come un numero o un elenco secondario. Innanzitutto, ottieni la priorità di ciascun elemento alla stessa profondità. Se un elemento è solo un numero, la sua priorità è uguale al numero stesso. Se un elemento è un elenco secondario, la sua priorità è la somma di tutti i numeri in esso contenuti, senza includere alcun elenco secondario secondario.
Quindi, le priorità di tutti gli elementi di profondità 1 sono:
( 7 ) 2 7 ( 3 ) 9
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Ordina ogni elemento per priorità. In caso di pareggio, è necessario mantenere lo stesso ordine dell'elenco originale.
2 ( 3 ) ( 7 ) 7 9
(2, (2, 1, (3, 4)), (5, 2), 7, 9)
Ripetere l'operazione per ogni elenco secondario. Quindi su questo elenco secondario
(2, 1, (3, 4))
Le nostre priorità sembrano:
2 1 ( 7 )
(2, 1, (3, 4))
Così ordinato, sembra:
(1, 2, (3, 4))
(3, 4)
è già in ordine, quindi abbiamo finito. Ripeti per (5, 2)
quali risultati (2, 5)
e abbiamo finito! Il nostro elenco finale è:
(2, (1, 2, (3, 4)), (2, 5), 7, 9)
Regole:
Altamente dubbio, ma nel caso in cui Mathematica abbia qualcosa per questo, non sono ammessi builtin di ordinamento degli elenchi nidificati. Sono consentite funzioni di ordinamento regolari .
L'I / O può essere in qualsiasi formato ragionevole.
Ogni elenco secondario conterrà almeno un numero o elenco. Inoltre, le liste secondarie possono essere nidificate a diversi livelli di profondità. Ad esempio, in
(1, 2, (((3))))
il(((3)))
ha una priorità 0, poiché ha solo sottoliste in esso.Gli elenchi non validi (parentesi non corrispondenti, non numeri, tipi di parentesi errati, numeri negativi, ecc.) Comportano un comportamento indefinito.
Test I / O:
(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))
Vince la risposta più breve in byte.