Driftsort adalah cara sederhana untuk "mengurutkan" sebuah array. Ia bekerja dengan "geser" atau "memutar" elemen-elemen dalam array sampai array diurutkan, atau sampai array gagal diurutkan.
Mari kita telusuri dua contoh. Pertama, pertimbangkan array [10, 2, 3, 4, 7]
. Karena array tidak diurutkan, kami memutarnya sekali. (Ini bisa terjadi di kedua arah, asalkan tetap arah yang sama.) Kemudian, array menjadi:
[7, 10, 2, 3, 4]
Ini tidak diurutkan, jadi kami memutar lagi.
[4, 7, 10, 2, 3]
Dan lagi:
[3, 4, 7, 10, 2]
Dan terakhir kali:
[2, 3, 4, 7, 10]
Dan itu disortir! Jadi array [10, 2, 3, 4, 7]
dapat di-driftsortable. Berikut ini semua rotasi array, untuk kejelasan:
[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]
Pertimbangkan sekarang array [5, 3, 9, 2, 6, 7]
. Lihatlah rotasinya:
[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]
Tidak satu pun dari array ini yang diurutkan, sehingga array [5, 3, 9, 2, 6, 7]
tidak dapat dipindahkan.
Objective Diberikan array kosong / daftar bilangan bulat sebagai input untuk suatu program / fungsi, mengimplementasikan driftsort pada input dan output itu, atau output nilai falsey ( atau array / daftar kosong) jika tidak dapat driftsort. Bilangan bulat terikat ke bahasa Anda maks / mnt, tetapi ini harus minimal 255 untuk maks, dan 0 untuk mnt.
Anda dapat menggunakan metode pemilahan bawaan, tetapi bukan bawaan yang memecahkan tantangan.
Ini adalah kode-golf , jadi program terpendek dalam byte.
Uji kasus
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
operasi yang menghapus elemen pertama dari sebuah array.
sorted(l)
adalah sublist yang berdekatan daril+l
.