Para los propósitos de esta pregunta, una baraja de cartas se formatea de esta manera:
[
"AS", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "JS", "QS", "KS",
"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",
"AC", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "JC", "QC", "KC",
"J", "J"
]
Las tarjetas siempre se formatean como valor, seguidas de palos. Por ejemplo, AS
es el as de espadas. Las dos J's son Jokers. Queremos barajar esta baraja de cartas, pero la baraja debe ser Superb ™.
Un Superb Shuffle ™ es uno en el que:
- No hay dos cartas (excepto Jokers) del mismo palo adyacentes.
- Ninguna carta (excepto Jokers) es adyacente a uno del mismo valor.
- Ninguna carta (excepto Jokers) es adyacente a uno de un valor adyacente (uno más alto o uno más bajo en este orden, A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A. Observe que Ace no puede ser adyacente a un 2 o un Rey).
- Los comodines pueden estar en cualquier posición.
- La definición de un Superb Shuffle ™ no requiere que las cartas estén en un orden diferente cada vez que se barajan. Lo cual no es muy excelente, pero es Superb ™.
Porque eso es Superb ™.
Un ejemplo podría ser:
[
"AS", "5D", "9H", "KC", "2D", "6H", "10C", "QS", "3H", "7C", "9S",
"KD", "4C", "6S", "10D", "AC", "3S", "7D", "JH", "J", "4D", "8H",
"QC", "AD", "5H", "9C", "JS", "2H", "6C", "8S", "QD", "3C", "5S",
"9D", "KH", "2S", "6D", "10H", "J", "3D", "7H", "JC", "KS", "4H",
"8C", "10S", "AH", "5C", "7S", "JD", "2C", "4S", "8D", "QH"
]
El reto:
- Escribe un código para ejecutar un sorteo excelente
- Usa cualquier idioma.
- La entrada puede ser cualquiera de :
- una baraja de cartas como se describió anteriormente en el mismo orden , como una matriz u otra estructura de lista.
- Sin entrada (el código genera una baraja de cartas en ese orden)
- La salida debe ser una baraja completa de cartas en un Superb Shuffle ™ como se describió anteriormente.
- Intente realizar su Superb Shuffle ™ en el menor número de bytes.
- Se prefiere un enlace a un intérprete en línea, como Try It Online , pero opcional.
Feliz barajando!
T
lugar de10
?Respuestas:
Japt,
654 bytesDivide el conjunto de entrada en subconjuntos de cada elemento 16 y se aplana.
Intentalo
fuente
Ruby , 31 bytes
Pruébalo en línea!
Explicación:
Estoy eligiendo una carta, luego me salto las siguientes 16 y comienzo desde la primera carta cuando llegue a la última carta del mazo. 17 y 54 son primos mutuos, así que estoy seguro de elegir todas las cartas.
Se garantiza que la posición 17 es un palo diferente y la diferencia de valor es al menos 2: la carta 13 (o 15) tiene el mismo valor y un palo diferente, por lo que al saltarse otros 4 (o 2), el valor es correcto .
fuente
Python 3 , 21 bytes
Pruébalo en línea!
Explicación:
La misma idea que mi respuesta de Ruby, pero aún más corta en Python: uso 17 mazos y elijo cada 17 carta.
fuente
JavaScript, 35 bytes
Pruébalo en línea!
Tomar una matriz de mazo como entrada y reemplazar cada valor impar con otra carta que esté a "20 cartas" de distancia en el mazo.
fuente
Java 10,
7265 bytesSimilar a la respuesta Ruby de @GB , pero al usar
i*7%54
en la matriz de resultados, en lugar dei*17%54
en la matriz de entrada para guardar un byte.Pruébalo en línea.
Explicación:
fuente
AS, 6S, JS, 3D, 8D, KD,
.Perl 6 ,
21 2018 bytesGracias a Brad Gilbert b2gills por -2 bytes
Pruébalo en línea!
Otro puerto de la respuesta de GB .
Tenga en cuenta que, si bien la variable globalSin embargo,$!
no se restablece entre funciones, el valor no importa, ya que cualquier orden de salida es válido.$
se restablece.Explicación:
fuente
$
que con$!
o$/
. Además, si usó en$_
lugar de@_
podría comenzarlo en.[…]
lugar de@_[…]
guardar otro byte.05AB1E ,
975 bytesEl puerto de la respuesta de Ruby de @GB , ¡así que asegúrate de votarlo!
-2 bytes imprimiendo cada tarjeta con un delimitador de nueva línea en lugar de envolverla en una lista de resultados
-2 bytes gracias a @ Mr.Xcoder
Pruébalo en línea.
Explicación:
fuente
ā17*è
debería ahorrar 2 bytes másJavaScript, 27
Otro basado en la respuesta rubí
Editado en un obvio acortamiento
fuente
T-SQL, 31 bytes
Si no le importa una columna adicional en la salida, puedo reducirla a 29 bytes :
Para que pueda verificar que mi salida es "Excelente", aquí está el mazo que produce:
(Generado usando la nueva adición de SQL 2017
STRING_AGG
):La parte difícil para mí no fue el código de selección, estaba poblando la tabla de entrada (que está permitida para SQL según nuestras reglas de E / S ).
Debido a que SQL está inherentemente desordenado (solo garantiza un cierto orden si incluye una
ORDER BY
cláusula explícita ), tuve que incluir ese orden original como un campo i en la tabla de entrada t . Esto también significa que puedo usarlo para ordenar, usando el mismo proceso de factor / mod "relativamente primo" que todos los demás están usando. Descubrí quei*7%54
funcionaba tan bien comoi*17%54
.Estos son los comandos para configurar y completar la tabla de entrada t , según mi solución a esta pregunta relacionada :
fuente
i
No se consideraría la entrada adicional aquí?Jalea ,
54 bytesPruébalo en línea!
Resulta la forma en
quetodos los demás, excepto el tipo aleatorio lo está haciendo, guarda un byte :(Crédito a GB por su método .
La forma en que fui ...
Pruébalo en línea!
¿Cómo?
Arregle cualquier otra carta e intercale con una rotación de la baraja dejada por 20 lugares (18 y 22 lugares también funcionan; además, lo hace cualquier dirección de rotación, así como la fijación de cartas impares o pares)
Es decir (usando
T
para10
yrj
&bj
para losJ
s):fuente
PowerShell 3.0,
3026 bytes-4 gracias al
código Mazzy Old a 30 bytes
Otro puerto del método de GB.
fuente
$args[(0..53|%{$_*17%54})]
.The input can be either:... in the same order, as *an array*
.$args
es una matriz y puedes usar un splatting . por ejemplo$a=@("AS", ..., "J"); &{} @a
. Intentalo. :)&{
y}
. Puede guardarparam($d)0..53|%{$d[$_*17%54]}
en un archivo. y llame a este archivo sin&{...}
Carbón de leña , 8 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Otro puerto de la respuesta de Ruby de @ GB. Explicación:
fuente
Rojo , 44 bytes
Pruébalo en línea!
Otra interpretación del código de GB. Añado 16 copias de la baraja a sí mismo y luego extraigo cada 17 carta.
fuente