배경
매우 숙련 된 카드 핸들러는 데크를 반으로 자른 다음 카드를 완벽하게 인터리빙하는 기술을 사용할 수 있습니다. 정렬 된 데크로 시작하여이 기술을 연속적으로 52 번 연속 수행하면 데크가 정렬 된 순서로 복원됩니다. 당신의 도전은 정수 데크 카드 를 정수 배열 로 가져 와서 Faro 셔플 만 사용하여 정렬 할 수 있는지 결정하는 것입니다.
정의
수학적으로 파로 셔플은 위치 i (1 인덱스) 의 요소 를 위치 2 i (mod 2 n +1)로 가져 오는 2 n 요소 (양의 정수 n에 대한 )의 순열입니다 . 홀수 길이 목록을 처리 할 수도 있기 때문에이 경우 목록 끝에 하나의 요소 (만약 하나가 있으면 조커)를 추가하고 위와 같이 새 목록을 섞습니다. 리스트의 순서를 확인할 때 추가 된 더미 요소.
골
일부 파로 셔플로 인해 목록이 내림차순으로 정렬되는 경우 정수 목록을 가져 와서 진실을 반환하거나 출력하는 프로그램이나 함수를 작성하십시오 (숫자가 0 인 경우에도 작은 목록은 진실성을 제공해야 함). 그렇지 않으면 거짓을 반환하거나 출력합니다.
예
[1,1,2,3,5,8,13,21] => True
[5,1,8,1,13,2,21,3] => True
[9,36,5,34,2,10,1] => True
[1,0] => True
[0] => True
[] => True
[3,2,1] => True
[3,1,2] => False
[9,8,7,6,5,4,3,2,1,0] => True
[9,8,7,6,5,4,3,2,0,1] => False
[3,1,4,1,5,9,2,6,9] => False
[-1,-1,-1,-2] => True
채점
이것은 코드 골프 이므로 바이트 단위의 가장 짧은 소스가 이깁니다.
동료 카드 처리기와의 혼동을 피하기 위해 두 종류의 파로 셔플이 있습니다. 에서 셔플 과 아웃 셔플 . 여기에 설명 된 방법은 셔플입니다. 흥미롭게도, 갑판을 원래 순서로 되 돌리는 데 8 번의 셔플 만 있으면됩니다. 추가 정보
—
BrainSteel
이것은 단지 "N + 1 번 섞여서 길을 따라 목록이 정렬되어 있는지 확인"하지 않습니까?
—
lirtosiast
실제로 n 번이면 충분합니다. 2n 번 수행하면 가능한 모든 순열을 찾을 수 있지만 첫 번째 n에서 오름차순 또는 내림차순 중 하나 이상을 얻게됩니다.
—
quintopia
첫 번째 요소가 항상 첫 번째 위치에 있지 않습니까?
—
Eumel