「ソート」アルゴリズム


33

スターリンソートとも呼ばれる「ソートアルゴリズム」があり、リストをソートするには、リストが昇順にソートされるまでリストから要素を削除するだけです。たとえば、リスト

[1, 2, 4, 5, 3, 6, 6]

スターリンの並べ替えを使用して「並べ替え」が行われる場合

[1, 2, 4, 5, 6, 6]

3つは故障していたため削除されました。

当然、要素を削除してリストをソートする方法はたくさんあります。たとえば、要素が2つ未満のリストは並べ替える必要があります。そのため、盲目的に十分な要素を削除するだけで、常にリストを並べ替えることができます。これが事実であるため、スターリンの並べ替えから可能な限り長い結果のみを考慮します。

あなたの仕事は、正の整数のリストを取得し、元のリストから要素を削除することで到達できる最長のソートされた(増加する)リストの長さを出力することです。それは、最長のソートされた(おそらく不連続な)サブリストの長さを見つけることです。

ソートされたリストは、同じ要素を連続して複数回持つことができます。プログラム自体が空でない限り、空のリストをサポートする必要はありません。

得点

あなたの答えは、スターリンの可能な限り最長のソートの長さによって採点されます。プログラムは文字ではなくバイトのシーケンスとして解釈され、その順序はバイトを数字として解釈することによって生じる自然な順序になります。スコアが低いほど優れています。

これははありません

ここだきちんと-Oツール、あなたの答えを得点を支援します。

テストケース

[1, 2, 4, 5, 3, 6, 6] -> 6
[19, 2] -> 1
[3, 3, 4, 3] -> 3
[10] -> 1
[1, 2, 4, 9] -> 4
[1, 90, 2, 3, 4, 5] -> 5
[1, 90, 91, 2, 3, 4, 5] -> 5


1
「プログラム自体が空でない限り、空のリストをサポートする必要はありません」というルールが気に入っています。
パウロEbermann

このチャレンジは、ドロップソートのチャレンジの多くを思い出させます。codegolf.stackexchange.com/ questions
61808

1
ptpb.pw/SVSt.htmlでチェッカーを作成しました。まだあまり機能的ではありませんが、機能します。(TODO:*棒グラフ*最小減少シーケンスへの分割*他のコードページのサポート)
-user202729

@ user202729かっこいい!投稿に追加しました。必要に応じて、新しいバージョンを自由に編集してください。
小麦ウィザード

回答:


8

Python 2、長さ14 12 10 9

M=max;X=exit;i=input();L=[0]*M(i)
for	a	in	i:L[a-1]=M(L[:a])+1
X(M(L))

出力は終了コード経由です。

オンラインでお試しください!

使い方

常に、配列Lは、これまでに検出された最長のソート済みサブ配列を追跡します。L[a1]aで終わる最長のものの長さです。

最初は、配列要素を処理していないため、Lは完全にゼロで構成されています。

配列要素の処理時にa、我々は最初の最大取る[L[0]L[a1]]、これまでに遭遇した最も長いソート部分配列の長さであることで終了以下の整数。このような配列にaを追加すると、ソートされたままになるため、aで終わる最長のソートされたサブ配列は、その最大値よりも1要素長くなります。計算値でL [ a 1 ]を更新します。aaaL[a1]

最終結果はLの最大値です。


なぜ機能するのか説明していただけますか?私はそれを理解するのに苦労しています:(
Dead Possum

説明を追加しました。
デニス


5

ゼリー、長さ 4  2

ṢƑƇZLƲ}ŒP

オンラインでお試しください!

Jellyのコードページのバイト

183 146 144 90 76 169 125 19 80

使い方

ṢƑƇZLƲ}ŒP  Main link. Argument: A (array)

       ŒP  Powerset; yield P, the array of all sub-arrays of A.
     Ʋ     Vier; combine the preceding four links into a monadic chain...
      }    and apply the chain to the right argument (P).
  Ƈ            Comb; only keep arrays for which the link to the left returns 1.
ṢƑ             Sort fixed; yield 1 if sorting doesn't alter the array.
   Z           Zip; read the filtered powerset by columns.
    L          Take the length.





2

R、スコア15 11、72の 62バイト

function(L,M=max,A=1:M(L)*0){for(Y in L)A[Y]=M(A[1:Y])+1;M(A)}

オンラインでお試しください!

RへのポートデニスのPythonの答え


最後のリンクに示されているように、変数名を変更するだけでは役に立ちません。なぜなら、スコア15を与える(見つかった)部分文字列で変数が使用されないためです。
ØrjanJohansen

@ØrjanJohansenああ、もちろん、私はかなり馬鹿です。別のアプローチが必要だと思います。
ジュゼッペ

2

Brachylog、長さ2(4バイト)

⊇≤₁l

オンラインでお試しください!

それほどソートされていないことにより、非常に簡潔であることを補う答え。

08 03 80 6CBrachylogのコードページ)

        Output
   l    the length of
 ≤₁     a non-decreasing
⊇       sublist of
        the input.
        (maximizing the size of the sublist)

私は►LSnmOṖHusk を思いつきましたが、そのスコア(少なくともその長さについて)は投稿するのが面倒です...
無関係な文字列
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.