Hearts es un juego de cartas con trucos para 4 jugadores. Cada truco lo realiza el jugador que jugó la carta más alta del palo principal. Al final de cada mano, los jugadores incurren en un puntaje de penalización dependiendo de las cartas de penalización que hayan tomado; la tarea es determinar los puntajes bajo las reglas de Microsoft Hearts .
Entrada
La entrada es 4 listas (o cadena delimitada, matriz, etc.) que muestran las tarjetas de penalización tomadas por cada uno de los 4 jugadores. Las tarjetas de penalización son
2♥, 3♥, 4♥, 5♥, 6♥, 7♥, 8♥, 9♥, 10♥, J♥, Q♥, K♥, A♥, Q♠
que representaremos como
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 0
respectivamente.
Salida
La salida son los 4 puntos de penalización incurridos por los 4 jugadores (lista, cadena, matriz, etc.). La puntuación es la siguiente:
- Cada corazón (
♥
representado por enteros1
a13
inclusivos) incurre en 1 punto - La reina de espadas (
Q♠
representada por0
) incurre en 13 puntos - Excepción: si un jugador ha tomado todas las cartas de penalización (llamadas tiro a la luna), incurre en 0 puntos, mientras que todos los demás jugadores incurren en 26 puntos.
Casos de prueba
[2, 8, 7, 1], [3, 4], [], [9, 5, 6, 0, 10, 11, 12, 13] --> 4, 2, 0, 20
[0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [], [], [1] --> 25, 0, 0, 1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0], [], [], [] --> 0, 26, 26, 26
El código más corto en bytes gana.
fuente
_26&1b
. -2 bytes.1b
... yo estaba tratando de encontrar un camino corto a su vez[26]
en26
y[]
en0
pero de alguna manera que no se me había ocurrido. Gracias :)R,
85 7774 bytesFunción sin nombre que toma una lista R como entrada. Funciona contando el número de elementos
>0
y agrega 13 si algún elemento dentro de cada vector es<1
( es decir, reina de espadas) y se almacena comoz
.Si cualquier elemento en
z
es>25
, de retorno26-z
, el retorno demász
.Pruébalo en R-Fiddle
fuente
26-z
?C ++ 14, 158 bytes
Como Lambda sin nombre:
Requiere ay
vector<vector<int>>
devuelvevector<int>
Sin golf:
Pocos casos de prueba para usted:
fuente
Python 2,
757271 bytesToma entrada como
[2, 8, 7, 1], [3, 4], [], [9, 5, 6, 0, 10, 11, 12, 13]
fuente
12*(0in a)
.print[[x,26-x][26in i]for x in i]
es un byte más corto.PHP, 113 bytes
La función toma una matriz de matrices, devuelve una matriz de valores.
Maravíllate con el mapeo de otros arreglos en PHP: bucles con elementos referenciados. Mucho más corto que
array_map
.fuente
Haskell,
625956 bytesUso:
fuente
f
comof n=13^0^n
.f x|all(<26)x=x|0<1=map(26-)x
y usarlo en lugar de la función lambda ahorra algunos bytes.05AB1E ,
262221 bytesEl espacio en blanco al final debe eliminarse de la entrada para que se interprete como una matriz. El final se inspiró en las otras respuestas al usar (26-x) cuando un jugador reunió todas las cartas de penalización.
Pruébalo en línea!
Todavía se ve bastante golfable, con constantes duplicadas y declaraciones condicionales.
Versión anterior, 26 bytes
(Un byte por cada punto en el valor de penalización máximo)
Decidí mantenerlo ya que su longitud se ajusta mejor a este desafío en mi opinión :).
Pruébalo en línea!
fuente
Python 3, 101 bytes
Código completo:
fuente
12*(c<1)+1
es 2 bytes más corto que(1,13)[c==0]
.26*(s>25)
es 3 bytes más corto que(26,0)[s==26]
.JavaScript (ES6),
82807772706967 bytesGuardado 2 bytes gracias a @Neil
Descompostura
fuente
c=>b*26^c
ahorra 2 bytes.Pip , 28 bytes
27 bytes de código, +1 para
-p
bandera.Toma información en la línea de comandos como una cadena que representa una lista anidada, como
"[[2 8 7 1] [3 4] [] [9 5 6 0 10 11 12 13]]"
(comillas no necesarias en TIO). Pruébalo en línea!fuente
Ruby, 59 bytes
O alternativamente,
Si solo una mano tiene cartas, queremos que las manos vacías obtengan un valor de 26, y la mano con cartas obtenga un valor de 0. Hago esto llamando
min
a las manos: esto devuelvenil
una matriz vacía, y luego Lo pongo||
en 26. En otros casos, cuento el número de cartas en una mano y luego sumo 12 a la Reina de Picas.fuente
Scala, 93 bytes
Uso:
Explicación:
Podría usar en
%toSet 26
lugar de% contains 26
porqueSet
elapply
método escontains
y no get-at-index comoSeq
el defuente