Corações é um jogo de cartas complicado para 4 jogadores. Cada truque é realizado pelo jogador que jogou a carta mais alta do naipe principal. No final de cada mão, os jogadores incorrem em uma pontuação de penalidade, dependendo das cartas que receberem; a tarefa é determinar as pontuações sob as regras do Microsoft Hearts .
Entrada
A entrada contém 4 listas (ou seqüência de caracteres delimitada, matriz, etc.) mostrando as cartas de penalidade recebidas por cada um dos 4 jogadores. Os cartões de penalidade são
2♥, 3♥, 4♥, 5♥, 6♥, 7♥, 8♥, 9♥, 10♥, J♥, Q♥, K♥, A♥, Q♠
que iremos representar como
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 0
respectivamente.
Saída
A saída é os 4 pontos de penalidade incorridos pelos 4 jogadores (lista, sequência, série, etc.). A pontuação é a seguinte:
- Cada coração (
♥
, representado por números inteiros1
e13
inclusivos) incorre em 1 ponto - A rainha de espadas (
Q♠
, representada por0
) incorre em 13 pontos - Exceção: se um jogador recebeu todas as cartas de penalidade (chamado atirar na lua), ele incorre em 0 pontos, enquanto todos os outros jogadores incorrem em 26 pontos.
Casos de teste
[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
O menor código em bytes vence.
fonte
_26&1b
. -2 bytes.1b
... eu estava tentando encontrar uma maneira curta de[26]
entrar26
e[]
entrar,0
mas de alguma forma isso não me ocorreu. Obrigado :)R,
85 7774 bytesFunção sem nome que recebe uma lista R como entrada. Funciona contando o número de elementos
>0
e adiciona 13 se algum elemento dentro de cada vetor é<1
(ou seja, dama de espadas) e armazena comoz
.Se qualquer elemento em
z
for>25
, retorne26-z
, então retornez
.Experimente no R-fiddle
fonte
26-z
?C ++ 14, 158 bytes
Como Lambda sem nome:
Requer um
vector<vector<int>>
e retornavector<int>
Ungolfed:
Poucos casos de teste para você:
fonte
Python 2,
757271 bytesAceita entrada como
[2, 8, 7, 1], [3, 4], [], [9, 5, 6, 0, 10, 11, 12, 13]
fonte
12*(0in a)
.print[[x,26-x][26in i]for x in i]
é um byte mais curto.PHP, 113 bytes
A função pega uma matriz de matrizes, retorna uma matriz de valores.
Maravilhe-se com o outro mapeamento de matriz no PHP: loops com itens referenciados. Waaay menor que
array_map
.fonte
Haskell,
625956 bytesUso:
fonte
f
comof n=13^0^n
.f x|all(<26)x=x|0<1=map(26-)x
-lo e usá-lo no lugar da função lambda economiza alguns bytes.05AB1E ,
262221 bytesO espaço em branco à direita deve ser removido da entrada para que seja interpretado como uma matriz. O final foi inspirado nas outras respostas ao usar (26-x) quando um jogador reunia todas as cartas de penalidade.
Experimente online!
Ainda parece bastante jogável, com constantes duplicadas e instruções condicionais.
Versão anterior, 26 bytes
(Um byte para cada ponto no valor máximo da penalidade)
Decidi mantê-lo, pois seu comprimento se encaixa melhor nesse desafio na minha opinião :).
Experimente online!
fonte
Python 3, 101 bytes
Código completo:
fonte
12*(c<1)+1
é 2 bytes menor que(1,13)[c==0]
.26*(s>25)
é 3 bytes menor que(26,0)[s==26]
.JavaScript (ES6),
82807772706967 bytesGuardado 2 bytes graças a @Neil
Demolir
fonte
c=>b*26^c
economiza 2 bytes.Pip , 28 bytes
27 bytes de código, +1 para
-p
sinalizador.Recebe entrada na linha de comando como uma sequência que representa uma lista aninhada, como
"[[2 8 7 1] [3 4] [] [9 5 6 0 10 11 12 13]]"
(aspas não necessárias no TIO). Experimente online!fonte
Ruby, 59 bytes
Ou alternativamente,
Se apenas uma mão tiver cartas, queremos que as mãos vazias obtenham um valor de 26 e a mão com cartas obtenham um valor 0. Faço isso chamando
min
as mãos - isso retornanil
para uma matriz vazia e, em seguida, I||
-lo em 26. em outros casos, eu contar o número de cartões em uma mão e em seguida, adicione 12 para a Rainha de Espadas.fonte
Scala, 93 bytes
Uso:
Explicação:
Eu poderia usar em
%toSet 26
vez de,% contains 26
porqueSet
oapply
método écontains
e não é indexado comoSeq
ofonte