Un riffle shuffle è un tipo di shuffle in cui il mazzo viene diviso in due partizioni e le partizioni vengono quindi ricucite insieme per creare un nuovo mazzo mischiato.
Le carte sono unite insieme in modo tale che le carte mantengano il loro ordine relativo all'interno della partizione di cui fanno parte . Ad esempio, se la carta A è prima della carta B nel mazzo e le carte A e B si trovano nella stessa partizione, la carta A deve trovarsi prima della carta B nel risultato finale, anche se il numero di carte tra loro è aumentato. Se A e B si trovano in partizioni diverse, possono essere in qualsiasi ordine, indipendentemente dal loro ordine di partenza, nel risultato finale.
Ogni shuffle di riffle può quindi essere visto come una permutazione del mazzo di carte originale. Ad esempio la permutazione
1,2,3 -> 1,3,2
è un riffle shuffle. Se dividi il mazzo in questo modo
1, 2 | 3
vediamo che ogni carta in 1,3,2
ha lo stesso ordine relativo ad ogni altra carta nella sua partizione. 2
è ancora dopo 1
.
D'altra parte la seguente permutazione non è un riordino di riffle.
1,2,3 -> 3,2,1
Possiamo vederlo perché per tutte e due le partizioni (non banali)
1, 2 | 3
1 | 2, 3
c'è una coppia di carte che non mantiene i relativi ordini. Nella prima partizione 1
e 2
modifica il loro ordine, mentre nella seconda partizione 2
e 3
modifica il loro ordine.
Comunque vediamo che 3, 2, 1
può essere realizzato componendo due shuffle di riffle,
1, 3, 2 + 2, 3, 1 = 3, 2, 1
In effetti un fatto piuttosto semplice da dimostrare è che ogni permutazione può essere fatta combinando un certo numero di permutazioni di shuffle del riffle.
Compito
Il tuo compito è creare un programma o una funzione che accetta una permutazione (di dimensione N ) come input e genera il minor numero di permutazioni di shuffle riffle (di dimensione N ) che possono essere combinate per formare la permutazione di input. Non è necessario emettere i riffle mescolando loro stessi quanti ce ne siano.
Si tratta di code-golf, quindi le risposte verranno classificate in byte con un numero inferiore di byte migliori.
È possibile generare 1 o 0 per una permutazione dell'identità.
Casi test
1,3,2 -> 1
3,2,1 -> 2
3,1,2,4 -> 1
2,3,4,1 -> 1
4,3,2,1 -> 2
4,3,2,1
essere 2
? Prima ci dividiamo nel mezzo e guadagniamo 3,1,4,2
e poi ci dividiamo di nuovo nel mezzo e usiamo la stessa permutazione