Introducción
Hace mucho tiempo, cuando solía codificar juegos de cartas con naipes habituales, solía especificar un número para cada tarjeta y llamar a una función con algún número para obtener una tarjeta. Esto me inspiró un poco para hacer este desafío.
Entonces, para las personas que desconocen las cartas de juego, un mazo de cartas consta de 52 cartas (13 en cada uno de los cuatro palos, es decir, Corazones, Diamantes, Picas, Clubes). En cada palo, hay 13 cartas: primero las cartas numeradas del 2 al 10, luego la Jota (J), la Reina (Q), el Rey (K) y el As (A). Esta es la orden
Reto
El desafío es tomar un número entero entre 1-52 como entrada y mostrar la tarjeta en esa posición. Pero, su salida debe estar en palabras. Además, se debe mantener el orden, es decir, las primeras 13 cartas serán de Corazones, luego Diamantes, luego Picas y finalmente Clubes.
Por ejemplo, si alguien elige el número 30
. La tarjeta pertenecería al tercer palo, es decir, las Picas. Además, sería la cuarta carta del palo, lo que significa el número 5. Por lo tanto, su salida en palabras debe ser: five of spades
y siempre debe seguir este formato , es decir, primero la carta, seguida de una of
y el nombre del palo en Al final, con los espacios requeridos en el medio.
Entrada y salida
La entrada será un número entero entre 1-52 (ambos incluidos). Tenga en cuenta que aquí el conteo comienza desde 1. Puede elegir comenzar desde 0 . Sin embargo, debe mantener el orden de las tarjetas que se menciona anteriormente. Su salida debe ser la tarjeta en esa posición escrita en palabras. No necesita manejar entradas inválidas. Además, su salida puede estar en minúsculas o en mayúsculas.
A continuación se muestra la lista de todas las entradas posibles y sus salidas:
1 -> two of hearts
2 -> three of hearts
3 -> four of hearts
4 -> five of hearts
5 -> six of hearts
6 -> seven of hearts
7 -> eight of hearts
8 -> nine of hearts
9 -> ten of hearts
10 -> jack of hearts
11 -> queen of hearts
12 -> king of hearts
13 -> ace of hearts
14 -> two of diamonds
15 -> three of diamonds
16 -> four of diamonds
17 -> five of diamonds
18 -> six of diamonds
19 -> seven of diamonds
20 -> eight of diamonds
21 -> nine of diamonds
22 -> ten of diamonds
23 -> jack of diamonds
24 -> queen of diamonds
25 -> king of diamonds
26 -> ace of diamonds
27 -> two of spades
28 -> three of spades
29 -> four of spades
30 -> five of spades
31 -> six of spades
32 -> seven of spades
33 -> eight of spades
34 -> nine of spades
35 -> ten of spades
36 -> jack of spades
37 -> queen of spades
38 -> king of spades
39 -> ace of spades
40 -> two of clubs
41 -> three of clubs
42 -> four of clubs
43 -> five of clubs
44 -> six of clubs
45 -> seven of clubs
46 -> eight of clubs
47 -> nine of clubs
48 -> ten of clubs
49 -> jack of clubs
50 -> queen of clubs
51 -> king of clubs
52 -> ace of clubs
Tanteo
Este es el código de golf , por lo que gana el código más corto.
fuente
two\s\s\sof\shearts
dónde se\s
encuentra un espacio? (Tenga en cuenta que los dos espacio extra.)Respuestas:
Python 3 ,
11590 bytesUna función sin nombre que devuelve la cadena en mayúsculas.
Pruébalo en línea!
¿Cómo?
Los caracteres Unicode tienen nombres. Los nombres de algunos de estos son como "TARJETA DE JUEGO DOS ESPACIOS", por lo tanto, podemos obtener los caracteres del personaje Unicode que representa la tarjeta requerida y quitar los primeros 13 caracteres para obtener nuestra salida.
Los caracteres de interés Unicode están dentro de un bloque como este:
Cuando
x
no hay personajes que buscamos (los cuatro en laC
columna son "caballeros"; tres enF
"bromistas"; uno en0
genérico; el resto son caracteres reservados).Como tal, podemos agregar algún valor a 0x1F0A1 = 127137 (As) para encontrar la tarjeta que queremos.
El valor para agregar solo se complica por tres cosas:
El uso de la opción de indexación única permite el uso de la división de enteros negativos para indexar en una matriz de compensaciones en filas para el reordenamiento del traje con
[6,0,4,2][-n//13]*8+
(efectivamente[48,0,32,16][-n//13]
), también podemos colocar los ases en las ubicaciones correctasn%13+
y luego evitar Caballeros en columnaC
conn%13//11+
(efectivamente(n%13>10)+
).fuente
Perl6 / Rakudo 70 bytes
Índice 0
Usando
perl6 -pe
, y sin compresión de diccionario:Simplemente busca la tarjeta en Unicode (a partir del As), pregunta el nombre y lo usa. Esta es una ruta similar (¡aunque no lo sabía en ese momento!) A la respuesta de Jonathan Aitken en Python : solo indico de los 4 ases en lugar de 4 compensaciones del Ace of Spades, y multiplico por 1.091 para hacer el índice alejarse de la entrada del Caballero en Unicode
Ver toda la salida (para los valores de entrada 0 a 51) https://glot.io/snippets/ez5v2gkx83
Editado para hacer frente a los Caballeros en el mazo Unicode, porque Unicode.
Perl6 ♥ Unicode
fuente
05AB1E , 54 bytes
0 indexado
Pruébalo en línea!
Explicación
fuente
“»€Å‹ spadesž…“#"of "ì“‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#âí»
- ¡ 54 bytes también!Python 2 ,
167148bytesIndexado a cero.
¡Pruébelo en línea!
EDITAR: Bubbler hizo un gran punto usando el método de división (y proporcionando una respuesta más corta). En el segundo bloque, usar split () produce el mismo recuento de bytes.
fuente
[n%13::13]
algo, pero no tuve suerte.s
; xnor lo señaló en el chat.R , 154 bytes
Pruébalo en línea!
Toma entrada (indexada 1) de STDIN y con
source(...,echo=T)
imprimirá el resultado en la consola.No es bonito, PERO viene en 2 bytes más corto que la mejor solución que podría usar
outer
(presentado a continuación), ¡así que este es un recordatorio para examinar otro enfoque!R , 156 bytes
Pruébalo en línea!
Esencialmente lo mismo que arriba; sin embargo,
outer
va a hacer el reciclaje correctamente, pero tener que configurarsep=" of "
para elpaste
hizo esto sólo un pelo más largo.fuente
Emojicode , 202 bytes
0 indexado. Pruébalo en línea!
Explicacion :
fuente
Excel, 156 bytes
Tarjetas de 0-51. Desafortunadamente, Excel no presenta una función para convertir
1
a"one"
...Usar
TRIM
yMID
es más corto que usarCHOOSE
para los valores faciales, pero más largo que usarCHOOSE
para el Traje.fuente
MID()
y combinando las palabras!Java 8, 141 bytes
La entrada está indexada en 0.
Explicación:
Pruébalo en línea.
fuente
Kotlin ,
154152140 bytesPruébalo en línea!
Actualizado para usar solo la expresión lambda.
fuente
JavaScript ES6,
124118 Bytes, índice 0Versión Base64
fuente
Stax ,
585756 bytesEjecutar y depurarlo
Aquí está la representación no comentada comentada del mismo programa. Utiliza los literales comprimidos de stax en gran medida. La entrada está indexada en 0. Es el algoritmo 05AB1E de Emigna.
Ejecute este
fuente
Bash, 133 bytes
Eligiendo usar 0 según la opción dada, apoyando 0 (dos de corazones) a 51 (as de clubes)
fuente
Casco , 52 bytes
Pruébalo en línea!
Siempre estoy feliz de mostrar el sistema de compresión de cuerdas de Husk: D
Explicación
La mayoría del programa (en
¨
adelante) es obviamente una cadena comprimida. Cuando se descomprime se convierte en:El programa entonces es:
Hay un par de cosas que quedan por explicar:
Construimos las tarjetas con palos antes que valores debido a cómo el producto cartesiano
Π
: si lo hiciéramos al revés, la lista de tarjetas se ordenaría por valor (es decir, dos de corazones, dos de diamantes, dos de espadas, dos de clubes, tres de corazones ...). Como consecuencia, tenemos que revertir nuestro resultado.El resultado del programa es una matriz bidimensional de cadenas. Husk lo imprime automáticamente como una cadena única creada al unir filas de la matriz con nuevas líneas y celdas con espacios. La razón por la que construimos esta matriz en lugar de usar la más sencilla
w
(unir una lista de palabras con espacios) es que si usaw
el inferenciador de tipo adivina otra interpretación para el programa, produciendo un resultado diferente.fuente
mIRCScript , 157 bytes
Carga como un alias, a continuación, utilizar:
/c N
. mIRC está indexado en 1, por lo que la división de piso (//) en el valor negativo de la entrada produce -1 a -4 según sea necesario.fuente
C (gcc) , 148 bytes
Pruébalo en línea!
Basado en 0.
fuente
\0
con bytes nulos literales.Haskell , 132 bytes
Pruébalo en línea!
Una función anónima, que usa la comprensión de la lista para construir todas las combinaciones de palo y valor, e indexa en la lista resultante con la entrada.
fuente
F #,
174bytesSe eliminó un poco de espacio en blanco adicional como lo señaló Manish Kundu. ¡Gracias!
Pruébalo en línea!
Seré honesto: soy nuevo en code golf, así que no sé si es más apropiado responder con una función pura como esta (con parámetros, pero sin E / S) o con un bloque de código que funcione con el usuario E / S
fuente
Octava ,
155153151150 bytesPruébalo en línea!
Esto crea una cadena que comienza con
' of '
y's'
, luego, todos los trajes seguidos por todos los rangos. Esta cadena se divide en comas en cadenas separadas. Los trajes están antes de las filas, ya que eso ahorra un byte al crear los índices. Después de esto, lo indexamos usando corchetes con los siguientes índices:cuál es el rango, seguido del primer elemento
' of '
, seguido del palo, seguido de's'
.Tener
's'
como parte de los trajes (hearts,diamonds,spades,clubs
) en lugar de una cadena separada es exactamente la misma longitud pero menos divertido.La división en el separador predeterminado
ahorraría 4 bytes en la
strsplit
llamada, pero los espacios alrededor' of '
se eliminarían y tendrían que agregarse manualmente, lo que costaría más bytes.fuente
V ,
154147144142 Bytes-7 Bytes gracias a DJMcMayhem
Pruébalo en línea!
Hexdump:
fuente
« == \+
2)12dj == 13D
ò
? Lo intenté enò13j0Pò
lugar de4ñ13j0Pñ
, pero eso no terminóP
agrega nuevas líneas? Además, ¿estás seguro de que necesitas0
esa parte? Me parece como que sería probable que funcione sin0
es innecesarioC # ,
219207202197 bytes (0 indexados)gracias a los aportes de @Ciaran_McCarthy y @raznagul
Toma una entrada de int I, resta 1 para que coincida con la indexación 0 del conjunto de cadenas y genera el número basado en I mod 13 y el palo basado en i / 14 + 13.
funciona bastante bien para mi segundo código de golf, preguntándome si podría acortarlo usando LINQ u otra cosa.
fuente
i++
se pueda eliminar por completo. Al convertir la función a una lambda, la reduje a 178 bytes .using
"of"
en la matriz.PowerShell ,
207192182174165163161157 bytes0-indexado
Pruébalo en línea!
4 bytes guardados gracias a AdmBorkBork en los comentarios
fuente
-split
en los espacios en blanco para ahorrar 6 bytes-split'two three four five six seven eight nine ten jack queen king ace'
y otro de bytes mediante línea sustituir en lugar de suelo$_/13-replace'\..*'
CJam , 114 bytes
Pruébalo en línea!
Indexado a cero. Probablemente será golpeado por idiomas con compresión de diccionario, pero bueno ...
fuente
Jalea , 61 bytes
0-indexación. Pruébalo en línea!
fuente
“...“...»Ḳ€¤Œpị@j“ of
Es probablemente más corto.Julia 0.6 , 156 bytes
Pruébalo en línea!
-2 bytes gracias a @Stewie Griffin
fuente
Haskell , 144 bytes
Pruébalo en línea!
Esto golpea todo tipo de puntos de dolor de Haskell.
fuente
SOGL V0.12 , 53 bytes
Pruébalo aquí!
fuente
Javascript
149143140 bytes-3 bits gracias a @rick hitchcock
fuente
[_/13|0]
. Por ejemplo:["hearts","diamonds","spades","clubs"][_/13|0]
a=
puesto ya que su función no es recursiva.Perl 5
-p
, 119 bytesBasado en 0
Pruébalo en línea!
fuente
Japt ,
9186 bytes0 indexado.
Utilicé una herramienta escrita por @Shaggy para generar las listas comprimidas.
Pruébalo en línea!
Explicación:
La primera cadena comprimida contiene los valores de tarjeta delimitados por
d
. La segunda cadena comprimida contiene los rangos de tarjetas delimitados pork
.Estos caracteres se seleccionaron con la herramienta de Shaggy, que genera una cadena delimitada por un carácter que se comprime de manera óptima usando shoco (la compresión que usa Japt). Esto nos permite crear una lista de valores y rangos de cartas.
Utilizamos backticks
`
para descomprimir estas cadenas, luego dividimos la cadena usandoq
, seguido del carácter para dividir.Una vez que tenemos las listas, asignamos los valores de la tarjeta, luego obtenemos el índice de la entrada. Es importante tener en cuenta que Japt ajusta sus índices, por lo que no tenemos que modularlo en 13.
En cada elemento, recorremos los rangos de cartas. Obtenemos el índice dividiendo la entrada por 13.
Una vez que tenemos ambos elementos, los concatenamos con
" of "
, lo que produce la cadena final.fuente
Gelatina ,
5855 bytesPruébalo en línea!
fuente