El primer truco de cartas mágicas que aprendí de niño fue el siguiente:
- Tenga 1 mazo de cartas donde el patrón en la parte posterior no sea verticalmente simétrico.
- Organice todas las tarjetas para que estén orientadas en una dirección.
- Pídale a un individuo que, "elija una tarjeta, cualquier tarjeta, memorícela y se la devuelva".
- Proceda a colocarlo en la plataforma (en la dirección incorrecta).
- Baraja vigorosamente, dando la ilusión de que no sabrás dónde está su carta.
- Produzca su tarjeta para su asombro.
Este truco es obviamente un poco lustroso en la naturaleza hoy en día, sin embargo, es un buen desafío. Escriba un programa que, cuando no se le da entrada, emite un mazo de cartas barajado aleatoriamente con una de las cartas, elegida al azar, invertida. Sin embargo, cuando la entrada es un mazo de cartas con una carta invertida, debe sacar la carta invertida (en el orden correcto).
El mazo de cartas
Una baraja de cartas se define como:
[2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS,
2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD,
2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH,
2C,3C,4C,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC]
Una tarjeta se define como su número, luego la primera letra de su palo. El reverso de una carta es exactamente lo contrario, la primera letra de su palo seguida de un número.
La carta dibujada
Ejemplo, si la carta que elegimos al azar para revertir era la 4 of Clubs (4C)
, terminaríamos con (sin barajar, obviamente):
[2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS,
2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD,
2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH,
2C,3C,C4,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC]
La barajadura
Luego, después de barajar:
[2H,2C,6S,4D,QH,6C,TD,8C,7H,5H,C4,3D,7S,7C,KC,QD,QC,JS,7D,6D,2S,5C,KD,3C,3S,2D,8H,KH,6H,AH,8S,JH,TS,AD,5D,9H,4H,JD,QS,4S,JC,3H,8D,TC,AS,TH,KS,AC,9C,9S,5S,9D]
Esta es una salida válida dada entrada vacía.
La entrada de cubierta
Sin embargo, a la inversa, cuando nuestro programa recibe la salida anterior como entrada, debería salir 4C
. Es decir, para una entrada de:
[2H,2C,6S,4D,QH,6C,TD,8C,7H,5H,C4,3D,7S,7C,KC,QD,QC,JS,7D,6D,2S,5C,KD,3C,3S,2D,8H,KH,6H,AH,8S,JH,TS,AD,5D,9H,4H,JD,QS,4S,JC,3H,8D,TC,AS,TH,KS,AC,9C,9S,5S,9D]
Usted itera hasta encontrar la carta invertida y la devuelve al estado normal. Así que aquí encontraríamos C4
, sabríamos que C no es un número, y lo devolveríamos como 4C
, lo cual es correcto.
Reglas
- No puede cargar la plataforma desde ninguna fuente externa.
- Una entrada vacía debería dar como resultado un mazo aleatorio con 1 carta aleatoria invertida.
- Una baraja de cartas con 1 carta invertida como entrada debería resultar en la carta invertida.
- Cualquier otra entrada puede dar lugar a llamas explosivas que circulan en segways a través de un tubo futurista.
- O cualquier otra cosa, para el caso.
- Tanto la carta elegida como el orden aleatorio deben ser uniformemente aleatorios.
- Es decir, todas las cartas tienen la misma posibilidad de ser seleccionadas para ser revertidas.
- Es decir, todas las combinaciones de cartas tienen la misma posibilidad de aparecer.
- Puedes usar
SHCD
oshcd
para los trajes, pero sea consistente:- Si elige trajes en mayúscula (
SHCD
) también debe usarTJQKA
. - Si elige trajes en minúsculas (
shcd
) también debe usartjqka
.
- Si elige trajes en mayúscula (
- Este es el código de golf , el ganador tiene los bytes más bajos.
fuente
Respuestas:
Retina ,
616059 bytesPruébalo en línea! Editar: Guardado
12 bytes gracias a @MartinEnder. Explicación:Eliminar todas las cartas no invertidas. Esto debería dejar una carta invertida o ninguna carta.
Si la entrada está (ahora) vacía, cree un paquete de tarjetas.
Seleccione aleatoriamente una carta y revierta (revierte la carta revertida).
Baraja las cartas.
fuente
05AB1E , 29 bytes
Pruébalo en línea!
fuente
1
ya
ahí dentro.Y9ŸJ
como9LJ
PowerShell v2 o posterior, 175 bytes
Versión larga:
Uso:
Crea un mazo barajado y guárdalo en una variable:
Inspeccione la variable a voluntad, por ejemplo
Instale nuevamente la cubierta en el guión:
fuente
Python 2 , 175 bytes
Pruébalo en línea! la entrada vacía se denota como
[]
fuente
> <> ,
215193 bytesPruébalo en línea!
Toma la entrada como tarjetas no separadas y la salida como la misma (p. Ej.
KCAC5C6S...
)Para facilitar la prueba, aquí hay una versión que toma entradas como separadas por comas y salidas como separadas por nueva línea.
Todos
x0
s son solo un intento de hacer un generador de números aleatorios semi uniforme. Más de ellos aumenta el rango de valores posibles, y lo contrario por menos. 10 de ellos es donde juzgué que era lo suficientemente aleatorio.Tenga en cuenta que sigue las reglas en eso:
Pero no todas las combinaciones barajadas son posibles resultados (y, de hecho, la gran mayoría no lo son).
fuente
Jalea , 26 bytes
Un enlace monádico que acepta una lista de listas de caracteres (un trozo de 0 cartas o un mazo completo de 52 cartas con una carta invertida) y devuelve una lista de listas de caracteres (un trozo de la carta 1 invertida pero hacia adelante o una completa -Cubierta con una carta aleatoria invertida).
Pruébalo en línea! (pie de página para hacer coincidir las representaciones de entrada y salida; como código completo de Jelly, Python evalúa el argumento y junta los caracteres para la salida)
¿Cómo?
fuente
Ẋ
antes deU
(tal vez pueda arreglarlo para cero bytes), pero tendré que hacerlo más tarde ...[[number, suit]]
lugar de[number, suit]
representar una sola tarjeta cuando la entrada no está vacía.Ruby , 95 (o 100) bytes
Dada una matriz vacía como entrada, devuelve el mazo como una matriz de cadenas. Dada una matriz no vacía como entrada, devuelve la tarjeta invertida como una matriz que contiene una sola cadena. Si la tarjeta invertida se requiere como una cadena en lugar de una matriz de un solo elemento que contiene una cadena, lo siguiente agrega 5 bytes: cambie
s-n
a(s-n)[0]
Pruébalo en línea!
La primera línea genera un mazo estándar. La segunda línea se desglosa de la siguiente manera.
fuente
Java 8,
275274259 bytesLa entrada es una Cadena, la salida es una Cadena o
java.util.List
depende de la entrada.Explicación:
Pruébalo en línea.
fuente
Pyth, 45 bytes
Toma la lista vacía para la entrada vacía.
Pruébalo en línea
Explicación
fuente
R ,
177171 bytesPruébalo en línea!
Dada una entrada vacía (llamada
f
sin entrada), establecemos por defectol=1
y, por lo tanto, creamos una permutación aleatoriam
del mazo. Asumiendo quesample
es verdaderamente aleatorio, existe la misma probabilidad de que cualquier carta sea la primera en esta lista. Entonces modificamos el primero, y luego barajamos nuevamente, devolviendo la lista.Al revertirlo, buscamos una tarjeta que comience con una
SDHC
y la revertimos.fuente
Python 2 , 135 bytes
Pruébalo en línea!
Las cartas son tuplas de
(value,suit)
La entrada vacía es
[]
fuente