Alice와 Bob은 음수가 아닌 정수로 번호가 매겨진 카드 덱으로 카드 게임을 좋아합니다.
그러나 Alice는 데크를 섞는 매우 특별한 방법이 있습니다. 먼저, 그녀는 덱에서 맨 위 카드를 가져 와서 덱 맨 아래에 놓습니다. 그런 다음 그녀는 다음 카드를 꺼내고 더미를 시작합니다. 그런 다음 다시 맨 위 카드를 맨 아래로 순환시키고 새 맨 위 카드를 더미에 놓습니다. 그녀는 갑판을 비울 때까지이 과정을 반복합니다.이 시점에서 더미는 새로운 갑판입니다.
deck | pile
-----------+-----------
3 1 4 0 2 |
1 4 0 2 3 |
4 0 2 3 | 1
0 2 3 4 | 1
2 3 4 | 0 1
3 4 2 | 0 1
4 2 | 3 0 1
2 4 | 3 0 1
4 | 2 3 0 1
| 4 2 3 0 1
4 2 3 0 1 |
그림 1 : Alice는 5 카드 데크 "3, 1, 4, 0, 2"에서 셔플을 수행합니다. 카드 뒷면이 모두 왼쪽을 향하고 있습니다.
어느 날 밥은 일주일의 휴가를 보내고 있다고 발표했다. 게임을 할 사람이없는 앨리스는 친구 이브를 불러 들인다. 이제 이브는 부끄러운 사기꾼이므로 앨리스의 독특한 셔플을 보면 미리 데크를 쌓을 수 있다는 것을 알게됩니다!
Eve는 첫날 이후 집에 돌아 왔을 때 게임에 대한 분석을하고 카드가 0, 1, 2, 3, 4, 5 순서 일 때 가장 가능성이 높다는 것을 알아 냈습니다. 덱에 몇 장의 카드가 있었는지 알기 때문에, 그녀는 팔에 코드를 작성하기 위해 겁에 질린 방식을 부화 시키며, 뛸 때 덱의 크기를 취하고 Eve가 카드를 넣는 순서를 표시합니다. 앨리스가 덱을 섞고 마지막 덱은 0, 1, 2, 3, ...
코드가 어떤 언어인지 (그녀가 모두 알고 있음), 또는 정수 인수를 취하고 배열을 반환하는 함수인지 명령 행 인수 또는 STDIN을 통해 입력을받는 전체 프로그램인지 여부는 Eve에게 중요하지 않습니다. 그리고 STDOUT에 결과를 쓰는 것. 그러나 그녀는 Alice가 코드를보고 붙잡을 가능성을 최소화하기 위해 가능한 짧은 코드를 필요로합니다.
부도덕 한 것처럼, 너희들은 이브를 도울 수 있습니까?
입력 및 출력 예 :
in out
1 0
2 0 1
5 2 4 0 3 1
10 2 9 4 8 0 7 3 6 1 5
52 6 51 25 50 12 49 24 48 1 47 23 46 11 45 22 44 5 43 21 42 10 41 20 40 2 39 19
38 9 37 18 36 4 35 17 34 8 33 16 32 0 31 15 30 7 29 14 28 3 27 13 26
shuffle(shuffle(range(5))) == range(5)
...