어레이의 셔플을 해제 할 수 있습니까?


15

배경

매우 숙련 된 카드 핸들러는 데크를 반으로 자른 다음 카드를 완벽하게 인터리빙하는 기술을 사용할 수 있습니다. 정렬 된 데크로 시작하여이 기술을 연속적으로 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


1
첫 번째 요소가 항상 첫 번째 위치에 있지 않습니까?
Eumel

답변:


3

Pyth- 26 25 24 바이트

누적 축소를 사용하여 Faro shuffle을 여러 번 적용하고 모든 결과를 유지합니다. 그런 다음 그것을 통해 매핑하고 정렬에서 변하지 않는지 확인한 다음 sum을 사용하여 확인하십시오. 양수 또는 0을 반환합니다.

smSI-db.usC_c2NQsC.tc2Qb

테스트 스위트 .


3

MATL , 41 바이트

itn2\?YNh]tnt1+:"x[]2e!PY)ttZN~)tS=At.]wx

출력은 1또는 0입니다.

설명

i              % get input array
tn2\           % is size odd?
?              % if that's the case
  YNh          % concat NaN at the end
]              % end if
tn             % get size of input array
t1+:           % vector 1:n+1, where n is input size, so loop will be entered even with []
"              % for loop
  x[]2e!PY)    % delete result from previous iteration and do the shuffling
  ttZN~)       % remove NaN, if there's any
  tS=A         % check if array is sorted
  t.           % copy the result. If true, break loop
]              % end for
wx             % remove unwanted intermediate result

>> matl itn2\?YNh]tnt1+:"x[]2e!PY)ttZN~)tS=At.]wx
> [1,1,2,3,5,8,13,21]
1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.