Driftsort to prosty sposób na „sortowanie” tablicy. Działa poprzez „przesuwanie” lub „obracanie” elementów w tablicy, dopóki tablica nie zostanie posortowana lub dopóki tablica nie zostanie posortowana.
Przejrzyjmy dwa przykłady. Najpierw rozważ tablicę [10, 2, 3, 4, 7]
. Ponieważ tablica nie jest posortowana, obracamy ją raz. (Może się to zdarzyć w dowolnym kierunku, pod warunkiem, że pozostaje ten sam kierunek.) Następnie tablica staje się:
[7, 10, 2, 3, 4]
To nie jest posortowane, więc obracamy ponownie.
[4, 7, 10, 2, 3]
I jeszcze raz:
[3, 4, 7, 10, 2]
I ostatni raz:
[2, 3, 4, 7, 10]
I to jest posortowane! Tak więc tablica [10, 2, 3, 4, 7]
jest przenośna. Oto wszystkie obroty tablicy, dla przejrzystości:
[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]
Rozważ teraz tablicę [5, 3, 9, 2, 6, 7]
. Spójrz na jego obroty:
[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]
Żadna z tych tablic nie jest sortowana, więc tablicy [5, 3, 9, 2, 6, 7]
nie można przenosić.
Cel Biorąc pod uwagę niepustą tablicę / listę liczb całkowitych jako dane wejściowe do programu / funkcji, zaimplementuj driftsort na wejściu i wyślij go, lub wypisz wartość falsey ( lub pustą tablicę / listę), jeśli nie można go posortować. Liczby całkowite są przypisane do twoich języków max / min, ale musi to być co najmniej 255 dla maksimum i 0 dla min.
Możesz użyć wbudowanych metod sortowania, ale nie wbudowanego, który rozwiązuje problem.
To jest golf golfowy , więc najkrótszy program w bajtach.
Przypadki testowe
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
operacji, która usuwa pierwszy element tablicy.
sorted(l)
jest ciągła podlistal+l
.