Come descritto in questa domanda :
Dropsort, progettato da David Morgan-Mar, è un esempio di "algoritmo di ordinamento" a tempo lineare che produce un elenco che, in effetti, è ordinato, ma contiene solo alcuni degli elementi originali. Qualsiasi elemento che non sia grande almeno quanto il massimo degli elementi che lo precedono viene semplicemente rimosso dall'elenco e scartato.
Per usare uno dei loro casi di test, un ingresso di {1, 2, 5, 4, 3, 7}
rendimenti {1, 2, 5, 7}
, come 4
e 3
sono entrambi sceso per essere più piccolo del precedente "ordinato" Valore, 5
.
Non vogliamo algoritmi di "ordinamento", vogliamo che siano il vero affare. Pertanto, voglio che tu scriva un programma che, dato un elenco di numeri, genera un elenco di elenchi DropSorted (per essere un algoritmo di ordinamento completo, avremmo bisogno di unire questi elenchi, ma in precedenza è stato fatto l' unione di due elenchi ordinati , e chiederti di farlo di nuovo significa praticamente fare due domande, quindi questa domanda è in particolare il passaggio "di divisione" del nostro DropSort completo).
La disposizione e il contenuto dei nostri elenchi è tuttavia fondamentale. L'output del programma deve essere equivalente all'output di un DropSort, seguito da un DropSort dei valori scartati e così via fino a quando non si dispone solo di un elenco di catene ordinate. Ancora una volta, prendendo in prestito la suite di test esistente (e aggiungendone altre due):
Input -> Output
{1, 2, 5, 4, 3, 7} -> {{1, 2, 5, 7}, {4}, {3}}
{10, -1, 12} -> {{10, 12}, {-1}}
{-7, -8, -5, 0, -1, 1} -> {{-7, -5, 0, 1}, {-8, -1}}
{9, 8, 7, 6, 5} -> {{9}, {8}, {7}, {6}, {5}}
{10, 13, 17, 21} -> {{10, 13, 17, 21}}
{10, 10, 10, 9, 10} -> {{10, 10, 10, 10}, {9}} //Note equivalent values aren't dropped
{5, 4, 3, 8, 7, 6} -> {{5, 8}, {4, 7}, {3, 6}}
{0, 2, 5, 4, 0, 7} -> {{0, 2, 5, 7}, {4}, {0}}
È possibile supporre che l'input non sia vuoto.
Questo è code-golf , quindi si applicano le regole standard!
{3,4,5,3,4,5,3,4,5}
risultare in {{3,4,5,5,5},{3,4,4},{3}}
?
[5, 4, 3, 8, 7, 6] -> [5, 8], [4,3,7,6]
?