introduzione
Supponiamo di voler calcolare i massimi di coda di un elenco di numeri, ovvero il massimo di ciascun suffisso non vuoto. Un modo per farlo è scegliere ripetutamente un numero e sostituirlo con un numero più elevato che si verifica dopo di esso, fino a quando questo non è più possibile. In questa sfida, il tuo compito è eseguire un passaggio di questo algoritmo.
L'obiettivo
Il tuo input è un elenco di numeri interi L , che può essere vuoto. L'output deve essere l'elenco L in cui esattamente un numero L i è stato sostituito da un altro L j , dove L i <L j e i <j .
In altre parole, è necessario sostituire un numero con un numero più elevato che si verifica dopo di esso.
Puoi scegliere i e j liberamente tra tutte le coppie valide e la scelta può essere non deterministica.
Se tale i e j non esistono (ovvero L non è in aumento), l'output deve essere L invariato.
Esempio
Considera l'ingresso L = [3, 1, 4, -1, 2] . Le operazioni possibili sono sostituire 3 per 4 , sostituire 1 per 4 , sostituire 1 per 2 o sostituire -1 per 2 . Pertanto le possibili uscite sono:
[ 3 , 1 , 4 , -1 , 2 ]
------------------------------
[( 4), 1 ,( 4), -1 , 2 ]
[ 3 ,( 4),( 4), -1 , 2 ]
[ 3 ,( 2), 4 , -1 ,( 2)]
[ 3 , 1 , 4 ,( 2),( 2)]
Se si ripete il numero sufficiente di tempi di funzionamento, il risultato finale sarà [4,4,4,2,2] , che è appunto la lista di coda massimi di L .
Regole e punteggio
È possibile scrivere un programma completo o una funzione. In quest'ultimo caso, è possibile modificare l'input in atto anziché restituire un nuovo array, se la lingua lo consente. I formati di input e output sono flessibili entro limiti ragionevoli.
Vince il conteggio dei byte più basso.
Casi test
Vengono visualizzate tutte le possibili uscite.
[] -> []
[1] -> [1]
[1,2] -> [2,2]
[2,1] -> [2,1]
[4,4,4,4] -> [4,4,4,4]
[-1,-3,-10] -> [-1,-3,-10]
[1,3,10] -> [3,3,10] [10,3,10] [1,10,10]
[1,1,2,1] -> [2,1,2,1] [1,2,2,1]
[998,64,2,-94,-789] -> [998,64,2,-94,-789]
[998,2,64,-94,-789] -> [998,64,64,-94,-789]
[3,1,4,-1,2] -> [4,1,4,-1,2] [3,4,4,-1,2] [3,2,4,-1,2] [3,1,4,2,2]
[-1,4,0,4,7,2,3] -> [4,4,0,4,7,2,3] [0,4,0,4,7,2,3] [-1,4,4,4,7,2,3] [7,4,0,4,7,2,3] [-1,7,0,4,7,2,3] [-1,4,7,4,7,2,3] [-1,4,0,7,7,2,3] [2,4,0,4,7,2,3] [-1,4,2,4,7,2,3] [3,4,0,4,7,2,3] [-1,4,3,4,7,2,3] [-1,4,0,4,7,3,3]
[3542,-12311,7662,1672,6081] -> [7662,-12311,7662,1672,6081] [3542,7662,7662,1672,6081] [3542,1672,7662,1672,6081] [6081,-12311,7662,1672,6081] [3542,6081,7662,1672,6081] [3542,-12311,7662,6081,6081]
x=>x.map(c=>c<x[++i]&!d?x[d=i]:c,d=i=0)
?