A Alice y Bob les gusta jugar un juego de cartas, con una baraja numerada con enteros consecutivos no negativos.
Sin embargo, Alice tiene una forma muy particular de barajar la baraja. Primero, toma la carta superior del mazo y la coloca en la parte inferior del mazo. Luego ella retira la siguiente carta y comienza un montón con ella. Luego, nuevamente, coloca la carta superior en la parte inferior y coloca la nueva carta superior en la pila. Ella repite este proceso hasta que se vacía el mazo, momento en el que el montón es el nuevo mazo.
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 realiza su barajado en el mazo de 5 cartas "3, 1, 4, 0, 2". La parte posterior de las cartas están todas hacia la izquierda.
Un día, Bob anuncia que se tomará una semana de vacaciones. Alice, al no tener a nadie con quien jugar, recluta a su amiga Eve. Ahora, Eve es una tramposa desvergonzada, así que cuando ve el peculiar barajado de Alice, se da cuenta de que puede apilar la baraja de antemano para su ventaja.
Cuando Eve llega a casa después del primer día, hace un análisis del juego y descubre que sus mejores probabilidades son cuando las cartas están en el orden 0, 1, 2, 3, 4, 5, ... No lo hizo. sin embargo, capta cuántas cartas había en el mazo, por lo que trama un esquema descabellado para escribir un código en su brazo que, cuando se ejecuta, toma el tamaño del mazo y muestra el orden en el que Eva debe colocar las cartas, de modo que cuando Alice baraja el mazo, el mazo final está en el orden 0, 1, 2, 3, ...
Realmente no le importa a Eve en qué idioma está el código (ella los conoce a todos), o si el código es una función que toma un argumento entero y devuelve una matriz, o un programa completo que toma información a través de un argumento de línea de comando o STDIN y escribiendo los resultados a STDOUT. Sin embargo, necesita el código lo más breve posible, para minimizar la posibilidad de que Alice lo vea y la atrape.
Por inmoral que pueda ser, ¿pueden ayudar a Eve?
Ejemplo de entradas y salidas:
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
fuente
shuffle(shuffle(range(5))) == range(5)
...Respuestas:
GolfScript,
151413 bytesPruébalo en línea.
Ejemplo
Cómo funciona
fuente
{}/
lugar del operador de mapa para guardar un carácter.](
ya que los dos primeros caracteres colocan efectivamente una matriz vacía debajo de la entrada, lo que le ahorra más tarde[]\
.Julia, 83
El último elemento en el vector devuelto es la parte superior de la cubierta.
fuente
Mathematica,
927746 bytesEspera la entrada en variable
n
:Literalmente, se trata de jugar aleatoriamente hacia atrás, moviéndose sobre una carta y luego colocando la carta inferior en la parte superior.
EDITAR: no es necesario realizar un seguimiento de la pila de salida, solo iterar a través de los enteros.
fuente
Python 2.7 - 57
Agradable y simple, simplemente invierte el barajado. Bastante cerca de cómo lo hace Golfscript.
fuente
J (13 caracteres) y K (9)
Como resultado, es un proceso simple para deshacer el shuffle, y los `` me gusta '' de APL tienen el adverbio de plegado
/
para ayudarlos a hacer esto lo más corto posible.J toma 13 Char con
(_1|.,)/@i.@-
, mientras que K sólo necesita 9:|(1!,)/!:
. APL sería igualmente breve.Aquí hay un rastro paso a paso de la versión J.
Usted puede notar que en el J, invertimos la primera matriz de enteros, pero en el K que lo hace después: esto es debido a que el K veces se parece más a una
foldl
, en comparación con el de Jfoldr
.fuente