De entrada y salida:
Entrada : Una cadena uniformemente aleatoria, infinitamente larga de '0's y' 1's, tomada de stdin. Se supone que la cadena es verdaderamente aleatoria, no seudoaleatoria. Es uniforme porque cada personaje es igualmente probable que sea un '0' o '1'.
¡Cuidado! La entrada es infinitamente larga, por lo que no puede almacenarlo todo en la memoria utilizando una función como raw_input () en python. Si no me equivoco, golfscript fallará con una entrada infinita, ya que empuja toda la entrada a la pila antes de correr.
Salida : un mazo estándar aleatorio uniformemente aleatorio, sin comodines. Es uniforme porque todos los pedidos son igualmente probables.
Cada carta en la salida es su rango, A, 2-9, T, J, Q o K concatenados con su palo, c, d, ho s. Por ejemplo, el 10 de espadas esTs
Las cartas del mazo deben estar separadas por espacios.
No puede utilizar bibliotecas o funciones aleatorias integradas porque no son realmente aleatorias, solo pseudoaleatorias.
Entrada de ejemplo
Puede usar el siguiente script de Python para canalizar la entrada en su programa:
import sys, random
try:
while True:
sys.stdout.write(str(random.randint(0,1)))
except IOError:
pass
Si guarda el script como rand.py, pruebe su programa con python rand.py | your_program
En Python 3 se ejecuta como se esperaba, pero en Python 2.7 recibo un mensaje de error después de la salida de mi programa, pero solo después de que todo está hecho, así que simplemente ignore el mensaje de error.
Salida de ejemplo:
Así es como se debe imprimir el mazo si se baraja en un orden ordenado:
Ac 2c 3c 4c 5c 6c 7c 8c 9c Tc Jc Qc Kc Ad 2d 3d 4d 5d 6d 7d 8d 9d Td Jd Qd Kd Ah 2h 3h 4h 5h 6h 7h 8h 9h Th Jh Qh Kh As 2s 3s 4s 5s 6s 7s 8s 9s Ts Js Qs Ks
Puntuación:
Este es un código de golf. El código más corto gana.
Programa de ejemplo:
Aquí hay una solución de Python 2.7, no golfizada.
import sys
def next():
return int(sys.stdin.read(1))==1
def roll(n):
if n==1:
return 0
if n%2==0:
r=roll(n/2)
if next():
r+=n/2
return r
else:
r=n
while(r==n):
r=roll(n+1)
return r
deck = [rank+suit for suit in 'cdhs' for rank in 'A23456789TJQK']
while len(deck)>0:
print deck.pop(roll(len(deck))),