Ad Alice e Bob piace giocare a carte, con un mazzo di carte numerate con numeri interi non negativi consecutivi.
Tuttavia, Alice ha un modo molto particolare di mescolare il mazzo. Per prima cosa, prende la prima carta dal mazzo e la mette in fondo al mazzo. Quindi rimuove la carta successiva e inizia una pila con essa. Quindi, di nuovo, sposta la carta in cima al fondo e mette la nuova carta in cima al mazzo. Ripete questo processo fino a quando non ha svuotato il mazzo, a quel punto il mazzo è il nuovo mazzo.
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 |
Figura 1: Alice esegue il suo shuffle sul mazzo da 5 carte "3, 1, 4, 0, 2". Il retro delle carte è rivolto verso sinistra.
Un giorno Bob annuncia che si sta prendendo una settimana di vacanza. Alice, non avendo nessuno con cui giocare, arruola la sua amica Eva. Ora, Eva è un imbroglione spudorato, quindi quando vede la particolare mescolanza di Alice, si rende conto che può impilare il mazzo in anticipo a suo vantaggio!
Quando Eva torna a casa dopo il primo giorno, fa alcune analisi sul gioco e scopre che le sue migliori probabilità sono quando le carte sono nell'ordine 0, 1, 2, 3, 4, 5, ... cattura quante carte c'erano nel mazzo, quindi, quindi tratteggia uno schema sfrenato per scrivere un codice sul braccio che, quando lanciato, prende le dimensioni del mazzo e mostra l'ordine in cui Eva deve mettere le carte, così che quando Alice mescola il mazzo, il mazzo finale è nell'ordine 0, 1, 2, 3, ...
Non importa davvero in quale lingua sia il codice (lei li conosce tutti), o se il codice è una funzione che prende un argomento intero e restituisce un array, o un programma completo che prende input tramite un argomento della riga di comando o STDIN e scrivendo i risultati su STDOUT. Tuttavia, ha bisogno del codice il più breve possibile, per ridurre al minimo la possibilità che Alice lo veda e la catturi.
Per quanto immorale, ragazzi, potete aiutare Eve?
Ingressi e uscite di esempio:
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)
...