Introducción
Suponga que desea calcular los máximos de cola de una lista de números, es decir, el máximo de cada sufijo no vacío. Una forma de hacerlo es elegir repetidamente un número y reemplazarlo por un número más alto que ocurra después, hasta que esto ya no sea posible. En este desafío, su tarea es realizar un paso de este algoritmo.
La tarea
Su entrada es una lista de enteros L , que pueden estar vacíos. Su salida será la lista L donde exactamente un número L i ha sido reemplazado por otro L j , donde L i <L j e i <j .
En otras palabras, deberá reemplazar un número con un número mayor que ocurra después.
Puedes elegir i y j libremente entre todos los pares válidos, y la elección puede ser no determinista.
Si tales i y j no existen (es decir, L no aumenta), su salida será L sin cambios.
Ejemplo
Considere la entrada L = [3, 1, 4, -1, 2] . Las posibles operaciones son reemplazar 3 por 4 , reemplazar 1 por 4 , reemplazar 1 por 2 o reemplazar -1 por 2 . Por lo tanto, las salidas posibles son:
[ 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)]
Si repite la operación suficientes veces, el resultado final será [4,4,4,2,2] , que es precisamente la lista de máximos de cola de L .
Reglas y puntaje
Puede escribir un programa completo o una función. En el último caso, puede modificar la entrada en su lugar en lugar de devolver una nueva matriz, si su idioma lo permite. Los formatos de entrada y salida son flexibles dentro de lo razonable.
El conteo de bytes más bajo gana.
Casos de prueba
Se muestran todas las salidas posibles.
[] -> []
[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)?