Escribe el código para determinar quién gana un truco de cuatro cartas en un juego de espadas . Pocos bytes ganan.
La entrada es una cadena que enumera las cuatro cartas jugadas en secuencia como TH QC JH 2H
(Diez de corazones, Reina de tréboles, Jota de corazones, Dos de corazones). Una carta viene dada por dos personajes: un palo de CDHS
y un valor de 23456789TJQKA
. Se le garantiza que la entrada es válida y que las tarjetas son distintas.
Debes generar un número 1, 2, 3 o 4 para el ganador del truco. En el ejemplo TH QC JH 2H
, la jota de corazones gana el truco, por lo que deberías generar 3.
Su entrada y salida debe ser exactamente como se describe, excepto que las nuevas líneas finales son opcionales.
Aquí están las reglas de Spades para ganar un truco. La carta ganadora es la carta más alta de las cuatro, con algunas advertencias. Picas es el palo de triunfo , por lo que cualquier espada supera a cualquier no espada. El palo de la primera carta jugada es el palo principal , y solo las cartas de ese palo o espadas son elegibles para ganar el truco. Las cartas del mismo palo se comparan por sus valores, que se dan en orden creciente 23456789TJQKA
.
Casos de prueba:
TH QC JH 2H
3
KC 5S QS 9C
3
QD 2D TD 5D
1
9S 5D AD QS
4
3D 4C 3H JH
1
9S 4S TS JS
4
5H 9H 2C AD
2
5S 4C 3H QD
1
2H 2S KH AH
2
fuente
.e
cosas valgan la pena: usaro
es 1 carácter más corto como lo imagino..e
solución 28. Pero la solución 27 terminó con ay, por lo)
tanto, también tenía 28 bytes. : oops:+@z1"KTA"
a"KTAZ"
, pero en lugar de usar las cadenas directamenteJ"KTAZ"
al principio y+@z1J
alJ
.X
opcional (solo si a y b son cadenas). Pero no estoy realmente seguro, siXab)
debería evaluarXab_b
(invertido b, sería bueno para cosas comoXa"</\>"
) oXab+tbhb
(b desplazado). Cual es tu preferenciaCJam,
3433 bytesAlgoritmo
La lógica es simple. Tengo un tipo personalizado, en el que primero doy prioridad al segundo personaje que representa el traje. En esto, Spades obtiene la máxima prioridad y luego la primera suite lanzada. Descansa todos son
-1
. Luego clasifico el primer personaje con el intercambio deT
conA
yQ
conK
para tener una clasificación léxica.Explicación del código
En primer lugar, veamos cuál es el orden léxico de los valores nominales de las tarjetas:
Entonces, todos los números están en la posición correcta.
J
También está en la posición correcta. Necesitamos intercambiarK
andQ
yJ
yA
obtener orden léxico.Pruébalo en línea aquí
fuente
JavaScript (ES6), 112
Escanee la lista y devuelva la posición del valor más alto encontrado.
Ejecute el fragmento para probar (en Firefox)
fuente
Perl, 73 bytes
Trate de mí .
Convierte los nombres de las cartas para que el orden del valor del juego siga el orden alfabético, luego elige el más alto al ordenarlo y lo busca en la cadena original para la posición.
fuente
Rubí, 59 + 2 = 61
Con banderas de línea de comandos
na
, ejecutefuente
J, 47 bytes
Uso:
Método:
'S[second char of input]AKQJT9876543'
cadena. Los caracteres no encontrados obtienen el valorlast position + 1
implícitamente. Otros personajes tienen mucho menos valor (value=(16-position)!
).TH_
QC_
9S_
y8S
).(J desafortunadamente no puede comparar caracteres o cadenas directamente. Solo puede verificar su igualdad, lo que descartó algunos otros enfoques para este desafío).
Pruébelo en línea aquí.
fuente
C #, 237
Cómo funciona: itere cada mano para calcular el "valor" de la tarjeta ... almacene el índice de mayor valor. El valor de una carta se determina como el rango de la carta multiplicado por 0 si no es una espada o el palo de apertura, 1 si es el palo de apertura y 9 si es una espada pero no el palo de apertura. (9 elegido b / c 2 * 9 = 18> A = 14 y 9 es un solo personaje)
fuente
Pyth,
3633 bytesEnfoque bastante sencillo, utiliza la clasificación con una función de tecla personalizada, luego encuentra el índice del valor más alto.
fuente
e
) puede obtener el último elemento, por lo que encontrar el valor más alto es simplemente ordenar seguido de obtener el último elemento.Pyth, 31 bytes
Pruébalo aquí
Cómo funciona:
La forma correcta de leer este procedimiento es al revés. El procedimiento ordena la tarjeta deseada al final de la lista, luego la saca y encuentra su índice en la lista original.
cz
: Esto genera la lista de cadenas de tarjetas.c
, chop, es normalmente una función binaria (arity 2), pero cuando se llama solo en una entrada, sirve como.split()
método de cadena.S
: Esto aplica el comportamiento de clasificación normal, que clasifica las tarjetas con números más bajos antes que las más altas.ox"TJQKA"hN
: Esto ordena las tarjetas por el índice (x
) en la cadena"TJQKA"
de la primera letra de la tarjeta (hN
). Para tarjetas con números, no se encuentra la primera letra, dando el resultado-1
. Como la función de clasificación de Pyth es estable, el orden de las tarjetas numeradas no se ve afectado.o}@z1Z
: Luego ordenamos por si el palo de la primera carta jugada (@z1
) está en la carta en cuestión. Como seTrue
clasifica por detrásFalse
, esto envía las cartas del palo principal a la parte posterior.o}\SN
: Esto es lo mismo que antes, pero ordena si la cartaS
está en la tarjeta, enviando espadas al reverso.hxczde
: Esto extrae la última carta ordenada de esta manera (e
), encuentra su índice en la lista de cartas (xczd
) y aumenta en 1 (h
), dando la ubicación del jugador deseado.fuente