David Morgan-Marによって設計されたDropsortは、実際にはソートされているが、元の要素の一部のみを含むリストを生成する線形時間「ソートアルゴリズム」の例です。少なくともその前の要素の最大値よりも大きくない要素は、単にリストから削除されて破棄されます。
テストケースの1つを使用するに{1, 2, 5, 4, 3, 7}
は{1, 2, 5, 7}
、yieldsの入力としてas 4
およびasの3
両方が、以前に「ソートされた」値より小さいためにドロップされます5
。
「ソート」アルゴリズムが必要なわけではありません。それが本物であることを望んでいます。したがって、数値のリストを指定して、DropSortedリストのリストを出力するプログラムを作成してください(完全なソートアルゴリズムであるために、これらのリストをマージする必要がありますが、 2つのソートされたリストのマージは以前に行われ、もう一度行うように依頼することは、2つの質問をすることとほぼ同じです。したがって、この質問は、具体的には完全なDropSortの「分割」ステップです。
ただし、リストの配置と内容は非常に重要です。プログラムの出力は、DropSortの出力と同等であり、その後に破棄された値のDropSortが続き、ソートされたチェーンのリストのみになるまで続きます。繰り返しますが、既存のテストスイートを借用します(さらに2つ追加します)。
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}}
入力が空でないと仮定できます。
これはcode-golfなので、標準のルールが適用されます!
{3,4,5,3,4,5,3,4,5}
、結果{{3,4,5,5,5},{3,4,4},{3}}
?
[5, 4, 3, 8, 7, 6] -> [5, 8], [4,3,7,6]
か?