前書き
数値のリストの末尾の最大値、つまり空でない各サフィックスの最大値を計算するとします。それを行う1つの方法は、1つの番号を繰り返し選択し、それが不可能になるまで、その番号の後に発生するより大きな番号に置き換えることです。この課題では、タスクはこのアルゴリズムの1つのステップを実行することです。
タスク
入力は整数Lのリストで、空の場合があります。出力はリストLになります。リストLでは、正確に1つの数値L iが別のL jに置き換えられています。ここで、L i <L jおよびi <jです。
言い換えると、1つの数値を、その後に発生するより大きな数値に置き換える必要があります。
あなたは選ぶことができますIおよびjは、有効なすべてのペアの間で自由に、そして選択は非決定的ことができます。
そのようなiとjが存在しない場合(つまり、Lが増加しない場合)、出力はLのままになります。
例
入力L = [3、1、4、-1、2]を考えます。可能な操作は、3を4に、1を4に、1を2に、または-1を2に置き換えることです。したがって、可能な出力は次のとおりです。
[ 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)]
操作を十分に繰り返すと、最終結果は[4,4,4,2,2]になります。これは、正確にLのテール最大値のリストです。
ルールとスコアリング
完全なプログラムまたは関数を作成できます。後者の場合、言語で許可されていれば、新しい配列を返す代わりに入力をその場で変更できます。入力および出力形式は、理由の範囲内で柔軟です。
最も低いバイトカウントが優先されます。
テストケース
すべての可能な出力が表示されます。
[] -> []
[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)
?