Golf Golf!
Este es mi primer desafío, ¡así que sé gentil! El desafío es escribir un programa que genere la puntuación correcta para un diseño en el juego de cartas "Golf".
El juego de cartas Golf tiene muchas variaciones. Las reglas de la casa que uso siguen las reglas estándar para Six-Card Golf dadas por Pagat, con una ligera diferencia. Ya existe un desafío similar aquí, pero creo que este es más interesante porque requiere que tengas en cuenta la orientación de las tarjetas.
Cada jugador tiene un diseño de cartas de 2x3. Al final de cada ronda, todas las cartas se ponen boca arriba y se puntúan de la siguiente manera:
- Cada as cuenta 1 punto.
- Cada dos cuenta menos dos puntos.
- Cada tarjeta numérica de 3 a 10 puntajes tiene un valor nominal.
- Cada Jack o Queen obtiene 10 puntos.
- Cada rey obtiene cero puntos.
- Un par de cartas iguales en la misma columna obtiene cero puntos para la columna (incluso si las cartas iguales son dos).
- Un conjunto de tres cartas iguales en la misma fila obtiene cero puntos para la fila (incluso si las cartas iguales son dos).
Entrada
La entrada puede ser una cadena o matriz de cualquier tipo.
Salida
Un entero que representa el puntaje de la mano Golf.
Ejemplos
Estos ejemplos usan la notación A23456789TJQK
pero no necesita usar esa notación en su respuesta.
Layout
AK3
J23
Score
9
-----------------------
Layout
25Q
25J
Score
20
-----------------------
Layout
T82
T8A
Score
-1
-----------------------
Layout
QQQ
234
Score
5
-----------------------
Layout
TJQ
QTJ
Score
60
-----------------------
Layout
888
382
Score
1
-----------------------
Layout
888
888
Score
0
Este es el código de golf, por lo que gana la respuesta más corta en bytes.
fuente
A23456789TJQK
pero no necesitas usar esa notación en tu respuesta".JJJ 2J2
->-4
.Respuestas:
Jalea , 9 bytes
Pruébalo en línea!
-1 gracias a Jonathan Allan .
[[A, B, C], [D, E, F]]
A
F
fuente
Haskell ,
10710398 bytesPruébalo en línea!
Aprovecha el hecho de que solo hay dos filas. Repetimos dos veces sobre las filas tomando una fila
r
y una filao
. Cuando son la misma fila, el resultado siempre será cero (debido a la coincidencia de "columnas"), por lo que solo consideraremos las dos iteraciones en las quer
yo
se refieren a las filas distintas. Pongo a cero las filas al verificar primero si alguna entrada en la fila no es igual a la primera. Si la fila es igual, esto será falso y la lista estará vacía, con una suma de 0. De lo contrario, comprimo esta fila con la otra e itero sobre los pares que no son iguales (esto pone a cero columnas iguales en una similar conducta). Finalmente indizo una lista de rangos de cartas que comienzan con -2 rellenos con espacios según sea necesario para asignar cada rango a su puntaje. Solo tengo que usarmin 10
sujetar ese índice para hacer que los gatos y las reinas cuestan 10 en lugar de 11 y 12.EDITAR: ¡gracias a @xnor por despegar 4 bytes! ¡No sabía que podías poner identificadores directamente después de los literales numéricos, eso es realmente genial!
EDIT2: ¡Gracias nuevamente a @xnor por otros 5 bytes! Gran idea iterar sobre las filas así
fuente
10
, y es más corto para omitir el@(a:_)
y en lugar de escribirr!!0
paraa
.a%a
yb%b
son cero, parece que se puede definirf
directamente por iteración en pares de líneas de este tipo .Carbón de leña , 50 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Lea el diseño en una matriz.
Inicializa el puntaje a cero.
Filtre en la entrada, eliminando caracteres que sean iguales a todos los caracteres en su fila o columna.
Cambia cada personaje restante.
2
puntajes-2
.A
puntajes1
. (Estos 4 bytes podrían eliminarse si1
se usara para denotar1
, pero en mi humilde opinión, es un abuso del formato de entrada).No hacer nada para
K
.De lo contrario, los dígitos puntúan su valor y otras letras puntúan
10
.Convierta la suma a cadena para impresión implícita.
fuente
J ,
3928 bytesPruébalo en línea!
Gracias a Erik the Outgolfer y Jonathan Allen por la idea de codificación de entrada.
explicación
Una solución muy "J". Te explicaré con el ejemplo ...
Tomemos la entrada:
y aplica esta codificación:
que produce:
Veamos la primera parte de la solución, eludiendo algunos detalles para comenzar:
Esto dice tomar la entrada
]
y su transposición|:
y crear una "tabla de multiplicación" de todas las combinaciones, excepto que en lugar de multiplicar aplicaremos el verbo entre paréntesis. El"1
especificador de clasificación asegura que tomamos todas las combinaciones de filas de ambos argumentos, pero dado que las filas de la transposición son las columnas de la matriz original, esto significa que tomaremos todas las combinaciones de filas y columnas. Es decir, haremos:Ahora, lo
verb
que aplicamos a cada uno de estos combos es+:&(1=#@~.)
y este verbo devuelve falso si "cualquiera de los argumentos consiste en un solo elemento repetido" y verdadero de lo contrario. Lo hace tomando la protuberancia, o uniq~.
, preguntando si su longitud es una1=#
, y tomando el nor del resultado+:
.Es decir, esto devolverá una máscara booleana con la misma forma que la matriz de entrada, pero con ceros para cualquier elemento en una fila o columna de todos los elementos iguales.
Ahora simplemente mutliply la matriz original por esta máscara y tomar el piso
]<.@*
:y luego aplanar y sumar el resultado de eso:
+/@,
fuente
JavaScript (ES6),
97 9593 bytesToma la entrada como una matriz de 2 matrices de 3 caracteres.
Pruébalo en línea!
Comentado
fuente
Japt , 22 bytes
Intentalo
fuente
PHP ,
145109bytesDespués de usar la
A23456789TJQK
codificación predeterminada para las entradas y no obtener un buen resultado, cambié a usar esta codificación de manera similar a otras respuestas:Entrada es una matriz de dos dimensiones en este formato:
[[1,0,3],[10.1,-2,3]]
. Básicamente verifica que la fila (usandomin
ymax
) y la columna para cada tarjeta no contengan valores iguales y luego agrega el valor de la tarjeta al puntaje total y al final imprime la parte entera del puntaje total.Pruébalo en línea! (Nota: TIO para PHP está roto en este momento, debido a una actualización de versión incorrecta, pero debería volver OK)
fuente
Python 3 , 79 bytes
Pruébalo en línea!
Utiliza el mismo formato de entrada que otras respuestas, valores1 , - 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 10.1 , 10.2 , 0 por las cartas.
Python 3 , 118 bytes
Formato de entrada más legible
Pruébalo en línea!
fuente
Kotlin , 159 bytes
Lambda toma 1.3456789TJQ0 como entrada. El código externo toma A23456789TJQK como entrada, convierte el as, dos y el rey para que las matemáticas funcionen, y muestra las tarjetas y el puntaje.
Pruébalo en línea!
fuente