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]
되지 않으므로 배열을 표류 할 수 없습니다.
목표 프로그램 / 함수에 대한 입력으로 비어 있지 않은 배열 / 정수 목록이 제공되면 입력에 드리프트 정렬을 구현하고 출력하거나, 표류 할 수없는 경우 잘못된 값 ( 또는 빈 배열 / 목록)을 출력합니다 . 정수는 언어 최대 / 분에 바인딩되지만 최대 값은 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
.