Ayer hice esta pregunta sobre el riffle shuffles. Parece que la pregunta de ayer fue demasiado difícil, por lo que esta es una tarea relacionada pero mucho más fácil.
Hoy se le pide que determine si una permutación es en realidad una mezcla aleatoria. Nuestra definición de riffle shuffle está adaptada de nuestra última pregunta:
La primera parte del shuffle es la división. En la división se divide el mazo de cartas en dos. Las dos subsecciones deben ser continuas, mutuamente excluyentes y exhaustivas. En el mundo real, desea que su partición sea lo más parecida posible, sin embargo, en este desafío esto no es una consideración, todas las particiones, incluidas las que están degeneradas (una partición está vacía) son de igual consideración.
Después de haber sido particionadas, las tarjetas se unen de tal manera que las tarjetas mantienen su orden relativo dentro de la partición de la que son miembros . Por ejemplo, si la carta A está antes de la carta B en el mazo y las cartas A y B están en la misma partición, la carta A debe estar antes de la carta B en el resultado final, incluso si el número de cartas entre ellas ha aumentado. Si A y B están en particiones diferentes, pueden estar en cualquier orden, independientemente de su orden inicial, en el resultado final.
Cada riffle shuffle se puede ver como una permutación del mazo de cartas original. Por ejemplo la permutación
1,2,3 -> 1,3,2
es un riffle shuffle Si divides la baraja así
1, 2 | 3
vemos que cada tarjeta 1,3,2
tiene el mismo orden relativo que todas las demás tarjetas de su partición. 2
Todavía está después 1
.
Por otro lado, la siguiente permutación no es un riffle shuffle.
1,2,3 -> 3,2,1
Podemos ver esto porque para las dos particiones (no triviales)
1, 2 | 3
1 | 2, 3
Hay un par de cartas que no mantienen su orden relativo. En la primera partición 1
y 2
cambiar su orden, mientras que en la segunda partición 2
y 3
cambiar su orden.
Tarea
Dada una permutación a través de cualquier método razonable, determine si representa una combinación aleatoria válida. Debe generar dos valores constantes distintos, uno para "Sí, este es un aleatorio" y otro para "No, no es un aleatorio".
Este es el código de golf, por lo que las respuestas se puntuarán en bytes, siendo mejores menos bytes.
Casos de prueba
1,3,2 -> True
3,2,1 -> False
3,1,2,4 -> True
2,3,4,1 -> True
4,3,2,1 -> False
1,2,3,4,5 -> True
1,2,5,4,3 -> False
5,1,4,2,3 -> False
3,1,4,2,5 -> True
2,3,6,1,4,5 -> False
[3,1,4,2,5]
.
[2,3,6,1,4,5]
.
[0, ..., n-1]
lugar de [1, ..., n]
como entrada?
0
para falso pero ¿algún entero[1, +∞)
para verdad?