Driftsort - это простой способ «сортировки» массива. Он работает путем «скольжения» или «вращения» элементов в массиве до тех пор, пока массив не будет отсортирован или пока массив не будет отсортирован.
Давайте пройдемся по двум примерам. Сначала рассмотрим массив [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]
не может быть перемещен.
Цель. Задать непустой массив / список целых чисел в качестве входных данных для программы / функции, реализовать на входе функцию дрейфовой сортировки и вывести ее или вывести значение Фолси ( или пустой массив / список), если оно не может быть дрейфовано. Целые числа привязаны к вашим языкам max / min, но это должно быть не менее 255 для максимума и 0 для минимума.
Вы можете использовать встроенные методы сортировки, но не встроенные, которые решают проблему.
Это код-гольф , поэтому самая короткая программа в байтах.
Контрольные примеры
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)
это непрерывный подсписок изl+l
.