Explicación
Un barajado perfecto es cuando una baraja de cartas se divide exactamente por la mitad y las cartas de cada pila se intercalan alternativamente. Las cartas inferiores originales y la carta superior original deben conservarse después de un barajado perfecto.
Después de 8 barajadas perfectas, un mazo de 52 cartas estándar vuelve a su orden original.
Desafío
Escriba un programa que muestre el estado de una baraja de cartas a medida que pasa por 8 barajadas perfectas consecutivas. Puede usar cualquier representación legible por humanos de un mazo, siempre que muestre el número y el palo de cada carta en el mazo en orden secuencial. Debe mostrar una representación de todas las tarjetas, para los nueve estados.
Este es el código de golf , por lo que gana la solución más corta.
Salida de ejemplo
Aquí hay una salida de ejemplo producida por esta implementación de ejemplo en Javascript
AS,AC,AD,AH,2S,2C,2D,2H,3S,3C,3D,3H,4S,4C,4D,4H,5S,5C,5D,5H,6S,6C,6D,6H,7S,7C,7D,7H,8S,8C,8D,8H,9S,9C,9D,9H,10S,10C,10D,10H,JS,JC,JD,JH,QS,QC,QD,QH,KS,KC,KD,KH
AS,7D,AC,7H,AD,8S,AH,8C,2S,8D,2C,8H,2D,9S,2H,9C,3S,9D,3C,9H,3D,10S,3H,10C,4S,10D,4C,10H,4D,JS,4H,JC,5S,JD,5C,JH,5D,QS,5H,QC,6S,QD,6C,QH,6D,KS,6H,KC,7S,KD,7C,KH
AS,4C,7D,10H,AC,4D,7H,JS,AD,4H,8S,JC,AH,5S,8C,JD,2S,5C,8D,JH,2C,5D,8H,QS,2D,5H,9S,QC,2H,6S,9C,QD,3S,6C,9D,QH,3C,6D,9H,KS,3D,6H,10S,KC,3H,7S,10C,KD,4S,7C,10D,KH
AS,9S,4C,QC,7D,2H,10H,6S,AC,9C,4D,QD,7H,3S,JS,6C,AD,9D,4H,QH,8S,3C,JC,6D,AH,9H,5S,KS,8C,3D,JD,6H,2S,10S,5C,KC,8D,3H,JH,7S,2C,10C,5D,KD,8H,4S,QS,7C,2D,10D,5H,KH
AS,5S,9S,KS,4C,8C,QC,3D,7D,JD,2H,6H,10H,2S,6S,10S,AC,5C,9C,KC,4D,8D,QD,3H,7H,JH,3S,7S,JS,2C,6C,10C,AD,5D,9D,KD,4H,8H,QH,4S,8S,QS,3C,7C,JC,2D,6D,10D,AH,5H,9H,KH
AS,3S,5S,7S,9S,JS,KS,2C,4C,6C,8C,10C,QC,AD,3D,5D,7D,9D,JD,KD,2H,4H,6H,8H,10H,QH,2S,4S,6S,8S,10S,QS,AC,3C,5C,7C,9C,JC,KC,2D,4D,6D,8D,10D,QD,AH,3H,5H,7H,9H,JH,KH
AS,2S,3S,4S,5S,6S,7S,8S,9S,10S,JS,QS,KS,AC,2C,3C,4C,5C,6C,7C,8C,9C,10C,JC,QC,KC,AD,2D,3D,4D,5D,6D,7D,8D,9D,10D,JD,QD,KD,AH,2H,3H,4H,5H,6H,7H,8H,9H,10H,JH,QH,KH
AS,AD,2S,2D,3S,3D,4S,4D,5S,5D,6S,6D,7S,7D,8S,8D,9S,9D,10S,10D,JS,JD,QS,QD,KS,KD,AC,AH,2C,2H,3C,3H,4C,4H,5C,5H,6C,6H,7C,7H,8C,8H,9C,9H,10C,10H,JC,JH,QC,QH,KC,KH
AS,AC,AD,AH,2S,2C,2D,2H,3S,3C,3D,3H,4S,4C,4D,4H,5S,5C,5D,5H,6S,6C,6D,6H,7S,7C,7D,7H,8S,8C,8D,8H,9S,9C,9D,9H,10S,10C,10D,10H,JS,JC,JD,JH,QS,QC,QD,QH,KS,KC,KD,KH
fuente
Respuestas:
J,
66655452504743 caracteresSalida:
Me obligan cada vez más a los tutoriales y manuales de referencia de J para seguir adelante aquí. : -S
fuente
AS
y la última es todo el tiempoKH
.Haskell, 103
Salida:
No sé si hay algún problema UTF-8 por aquí, no debería ... este es un volcado hexadecimal del programa
y de la primera línea de salida
( las cartas de juego unicode )
fuente
Python 2, 79 caracteres
La salida es un poco fea, pero creo que debería contar.
fuente
product
!Python2, 104
Esto es similar a la solución de Ev_Genus. Puse el palo antes del rango porque me permite guardar un personaje.
Salida
fuente
[r,'10'][r>"Q"]
es ingenioso No creo que necesites backticks alrededor del10
. Las cotizaciones harían bien.exec'print d;d=d[::2]+d[1::2];'*9
.sum
.APL (42)
La salida es de arriba hacia abajo en lugar de izquierda-derecha (pero sigue siendo legible para humanos, así que supongo que no va en contra de las reglas).
Salida:
fuente
K,
555351Afeitado 2 caracteres al cambiar de la representación del símbolo a una cadena
salida
fuente
(2;26)
a2 26
Ruby 1.9 (
959387)Salida:
fuente
a=(0..51).map{|i|:A23456789TJQK[i/4]+:SCDH[i%4]}
pop
lugar deslice!
y guardar 6 caracteres.9.times{p a;a=a.zip(a.pop 26).flatten}
Python3,
180179Emite líneas como en la tarea.
Formato nativo 151
La salida es como en la versión Ruby.
fuente
import
y*
: ideone.com/kQTbsGolfScript,
515046 caracteresEste código de GolfScript produce el siguiente resultado (ver aquí ):
fuente
{...}%
por4*
.Perl, 91 caracteres
¿Alguna sugerencia sobre una forma más concisa de construir el mazo inicial? Mi enfoque utiliza 2 sustituciones para construir
$_
y luego una coincidencia global en el contexto de la lista para inicializar@_
.El barajado continuación se realiza mediante varias ocasiones
splice
ing@_
hacia@a
y entrelazado con las dos listasmap
de nuevo en@_
.fuente
Mathematica
13112912011410086 caracteresCon la ayuda de Mr.Wizard:
Salida:
fuente
NestList[Riffle@@#~Partition~26&,#<>""&/@Tuples@Characters@{"A23456789TJQK","HDCS"},8]
StringJoin
.CJam, 34 bytes
CJam es más nuevo que la pregunta, por lo que esta respuesta no compite por la marca de verificación verde, pero pensé que sería un buen problema intentarlo en CJam.
Pruébalo aquí.
Imprime la salida como
Explicación
fuente
A,2>
obtener los números, ¡buen pensamiento!R , 97 bytes
Guardado unos pocos bytes con un conveniente mazo fuera de servicio
Pruébalo en línea!
fuente
/// , 753 bytes
Pruébalo en línea!
Utiliza la salida de ejemplo (es bastante adecuada para este propósito) sin los espacios finales.
fuente
05AB1E , 24 bytes
Utiliza tarjetas en minúsculas para guardar 2 bytes con compresión, ya que se permite cualquier salida legible por humanos.
El mazo inicial / final es:
Pruébelo en línea (PS: utiliza el TIO heredado porque es mucho más rápido. Sin embargo, todos los componentes incorporados que se utilizaron en esta respuesta son los mismos tanto en el legado de Python como en las versiones de reescritura de Elixir de 05AB1E).
Explicación:
Consulte este consejo mío de 05AB1E (sección ¿Cómo comprimir cadenas que no forman parte del diccionario? ) Para comprender por qué
.•-Ÿ•
es"ajqk"
y.•ôì•
es"cdhs"
.fuente
Japt , 31 bytes
¡Intentalo!
Aunque Japt tiene una función razonable de "intercalar dos listas", no tiene una gran opción de "separar en mitades". En su lugar, opté por mezclar un mazo y simplemente mostrar esos pasos en reversa.
Explicación:
Podría ahorrar 2 bytes si pudiera usar 1 para ases en lugar de A, pero ninguna de las otras respuestas hizo eso
fuente
Perl 6 , 69 bytes
Pruébalo en línea!
{ .say; .[flat ^26 Z 26..*] }
es una función anónima que imprime su lista de argumentos, luego devuelve una combinación aleatoria perfecta de esa listaxx 9
produce una lista que contiene nueve copias de esa función anónima[o]
reduce esa lista con el operador de composición de funcioneso
, produciendo una función que llama a la función anónima original nueve veces, pasando la lista aleatoria por cada nivel«A {2..10} J Q K»
es una lista de los rangos,<S C D H>
es una lista de los trajes yX~
produce el producto cruzado de esas listas con el operador de concatenación de cadenas~
.fuente