Driftsortは、配列を「ソート」する簡単な方法です。配列が並べ替えられるまで、または配列の並べ替えに失敗するまで、配列内の要素を「スライド」または「回転」させることで機能します。
2つの例を見てみましょう。まず、配列を考え[10, 2, 3, 4, 7]
ます。配列はソートされていないため、一度回転させます。(これは、同じ方向のままである限り、どちらの方向でも発生する可能性があります。)次に、配列は次のようになります。
[7, 10, 2, 3, 4]
これはソートされていないため、再度回転します。
[4, 7, 10, 2, 3]
そしてまた:
[3, 4, 7, 10, 2]
そして最後の時間:
[2, 3, 4, 7, 10]
そして、それはソートされています!したがって、配列[10, 2, 3, 4, 7]
はドリフトソート可能です。明確にするために、配列のすべての回転を次に示します。
[10, 2, 3, 4, 7]
[7, 10, 2, 3, 4]
[4, 7, 10, 2, 3]
[3, 4, 7, 10, 2]
[2, 3, 4, 7, 10]
ここで、配列を検討してください[5, 3, 9, 2, 6, 7]
。その回転を見てください:
[5, 3, 9, 2, 6, 7]
[7, 5, 3, 9, 2, 6]
[6, 7, 5, 3, 9, 2]
[2, 6, 7, 5, 3, 9]
[9, 2, 6, 7, 5, 3]
[3, 9, 2, 6, 7, 5]
これらの配列はいずれもソートされ[5, 3, 9, 2, 6, 7]
ないため、配列はドリフトソートできません。
目的プログラム/関数への入力として整数の空でない配列/リストを指定し、入力にドリフトソートを実装して出力するか、ドリフトソートできない場合は偽の値(または空の配列/リスト)を出力します。整数は言語の最大値/最小値にバインドされますが、最大値は少なくとも255、最小値は0でなければなりません。
組み込みのソート方法を使用できますが、課題を解決する組み込みのソート方法は使用できません。
これはcode-golfなので、バイト単位の最短プログラムです。
テストケース
input => output
[1] => [1]
[5, 0, 5] => [0, 5, 5]
[3, 2, 1] => false
[0, 9, 3] => false
[1, 2, 3, 4] => [1, 2, 3, 4]
[4, 1, 2, 3] => [1, 2, 3, 4]
[0, 2, 0, 2] => false
[5, 3, 9, 2, 6, 7] => false
[0, 0, 0, 0, 0, 0, 0] => [0, 0, 0, 0, 0, 0, 0]
[75, 230, 30, 42, 50] => [30, 42, 50, 75, 230]
[255, 255, 200, 200, 203] => [200, 200, 203, 255, 255]
shiftsort
か?
shift
が、配列の最初の要素を削除する操作と混乱を引き起こす可能性があります。
sorted(l)
は、if がの連続したサブリストである場合ですl+l
。