Uma reprodução aleatória de rifles é um tipo de reprodução aleatória em que o baralho é dividido em duas partições e as partições são então unidas novamente para criar um novo baralho baralhado.
Os cartões são unidos de maneira que os cartões mantenham sua ordem relativa na partição da qual são membros . Por exemplo, se o cartão A estiver antes do cartão B no baralho e os cartões A e B estiverem na mesma partição, o cartão A deverá estar antes do cartão B no resultado final, mesmo que o número de cartões entre eles tenha aumentado. Se A e B estiverem em partições diferentes, eles poderão estar em qualquer ordem, independentemente da ordem inicial, no resultado final.
Cada baralhamento de rifles pode ser visto como uma permutação do baralho de cartas original. Por exemplo, a permutação
1,2,3 -> 1,3,2
é uma reprodução aleatória. Se você dividir o baralho assim
1, 2 | 3
vemos que cada cartão 1,3,2
tem a mesma ordem relativa a todos os outros cartões em sua partição. 2
ainda está depois 1
.
Por outro lado, a permutação a seguir não é uma reprodução aleatória.
1,2,3 -> 3,2,1
Podemos ver isso porque para todas as duas partições (não triviais)
1, 2 | 3
1 | 2, 3
há um par de cartas que não mantêm suas ordens relativas. Na primeira partição 1
e 2
altere sua ordem, enquanto na segunda partição 2
e 3
altere sua ordem.
No entanto, vemos que isso 3, 2, 1
pode ser feito compondo dois shuffles rifles,
1, 3, 2 + 2, 3, 1 = 3, 2, 1
De fato, um fato bastante simples a ser provado é que qualquer permutação pode ser feita pela combinação de um certo número de permutações de ruffle shuffle.
Tarefa
Sua tarefa é criar um programa ou função que use uma permutação (de tamanho N ) como entrada e produza o menor número de permutações de ruffle shuffle (de tamanho N ) que podem ser combinadas para formar a permutação de entrada. Você não precisa produzir os ruffles aleatoriamente apenas quantos existem.
Isso é código-golfe, então as respostas serão pontuadas em bytes, com menos bytes sendo melhores.
Você pode gerar 1 ou 0 para uma permutação de identidade.
Casos de teste
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
ser 2
? Primeiro vamos dividir no ganho médio e 3,1,4,2
e depois nos separamos no meio novamente e usar a mesma permutação