Golfe Golfe!
Este é o meu primeiro desafio, por favor, seja gentil! O desafio é escrever um programa que produza a pontuação correta para um layout no jogo de cartas "Golf".
O jogo de cartas Golf tem muitas variações. As regras da casa que eu uso seguem as regras padrão do Six-Card Golf fornecidas por Pagat, com uma pequena diferença. Já existe um desafio semelhante aqui, mas acho que este é mais interessante porque exige que você leve em consideração a orientação dos cartões.
Cada jogador tem um layout de cartões 2x3. No final de cada rodada, todas as cartas são viradas para cima e pontuadas da seguinte forma:
- Cada ás conta 1 ponto.
- Cada dois conta menos dois pontos.
- Cada cartão numérico de 3 a 10 pontua o valor nominal.
- Cada Valete ou Rainha ganha 10 pontos.
- Cada rei marca zero pontos.
- Um par de cartas iguais na mesma coluna obtém zero ponto na coluna (mesmo que as cartas iguais sejam dois).
- Um conjunto de três cartas iguais na mesma linha obtém zero ponto na linha (mesmo que as cartas iguais sejam dois).
Entrada
A entrada pode ser uma string ou matriz de qualquer tipo.
Resultado
Um número inteiro representando a pontuação da mão Golf.
Exemplos
Esses exemplos usam a notação, A23456789TJQK
mas você não precisa usá-la em sua resposta.
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
Isso é código de golfe, então a resposta mais curta em bytes vence!
fonte
A23456789TJQK
mas você não precisa usá-la em sua resposta".JJJ 2J2
->-4
.Respostas:
Geléia , 9 bytes
Experimente online!
-1 graças a Jonathan Allan .
[[A, B, C], [D, E, F]]
A
F
fonte
Haskell ,
10710398 bytesExperimente online!
Aproveita o fato de haver apenas duas linhas. Nós repetimos a iteração sobre as linhas que seguem uma linha
r
e outrao
. Quando eles estão na mesma linha o resultado será sempre zero (devido ao matching "colunas") de modo que só irá considerar as duas iterações em quer
eo
referem-se a linhas distintas. Eu zerar as linhas verificando primeiro se alguma entrada na linha não é igual à primeira. Se a linha for toda igual, isso será falso e a lista estará vazia, com uma soma de 0. Caso contrário, eu fecho esta linha com a outra e repito sobre os pares que não são iguais (isso zera as colunas iguais de maneira semelhante) maneira). Finalmente, indexo uma lista de classificações de cartas começando com -2 preenchimento com espaços, conforme necessário, para mapear cada classificação para sua pontuação. Eu só tenho que usarmin 10
fixar esse índice para fazer valetes e rainhas custa 10 em vez de 11 e 12.EDIT: obrigado a @xnor por descolar 4 bytes! Eu não sabia que você poderia colocar identificadores diretamente após números literais, isso é muito legal!
EDIT2: Agradecemos novamente a @xnor por mais 5 bytes! Ótima idéia para percorrer as linhas assim
fonte
10
e é mais curto omitir o@(a:_)
e escreverr!!0
para elea
.a%a
eb%b
são zero, parece que você pode definirf
diretamente por iteração sobre pares de linhas como este .Carvão , 50 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Leia o layout em uma matriz.
Inicialize a pontuação para zero.
Filtre a entrada, removendo caracteres que sejam iguais a todos os caracteres em sua linha ou coluna.
Alterne cada caractere restante.
2
pontuações-2
.A
pontuações1
. (Esses 4 bytes podem ser removidos se forem1
usados para indicar1
, mas IMHO é um abuso do formato de entrada.)Não faça nada por
K
.Caso contrário, os dígitos pontuam seu valor e as outras letras
10
.Transmitir a soma para string para impressão implícita.
fonte
J ,
3928 bytesExperimente online!
Agradecemos a Erik the Outgolfer e Jonathan Allen pela idéia de codificação de entrada.
explicação
Uma solução muito "J". Vou explicar pelo exemplo ...
Vamos dar a entrada:
e aplique esta codificação:
que produz:
Vejamos a primeira parte da solução, delineando alguns detalhes para começar:
Isso diz que pegue a entrada
]
e sua transposição|:
e crie uma "tabela de multiplicação" de todas as combinações, exceto que, em vez da multiplicação, aplicaremos o verbo entre parênteses. O"1
especificador de classificação garante que tomemos todas as combinações de linhas de ambos os argumentos, mas como as linhas da transposição são as colunas da matriz original, isso significa que usaremos todas as combinações de linhas e colunas. Ou seja, estaremos fazendo:Agora
verb
, aplicamos a cada um desses combos+:&(1=#@~.)
e esse verbo retornará false se "qualquer argumento consistir em um único item repetido" e true, caso contrário. Isso é feito pegando o nub, ou uniq~.
, perguntando se seu comprimento é um1=#
e pegando o nem do resultado+:
.Ou seja, isso retornará uma máscara booleana com a mesma forma que a matriz de entrada, mas com zeros para qualquer item em uma linha ou coluna de todos os itens iguais.
Agora, simplesmente mutliply a matriz original por esta máscara e tomar a palavra
]<.@*
:e achatar e somar o resultado disso:
+/@,
fonte
JavaScript (ES6),
97 9593 bytesRecebe a entrada como uma matriz de 2 matrizes de 3 caracteres.
Experimente online!
Comentado
fonte
Japonês , 22 bytes
Tente
fonte
PHP ,
145109 bytesDepois de usar a
A23456789TJQK
codificação padrão para entradas e não obter um bom resultado, passei a usar essa codificação semelhante a outras respostas:A entrada é uma matriz bidimensional neste formato:
[[1,0,3],[10.1,-2,3]]
. Basicamente, verifica se a linha (usandomin
emax
) e a coluna de cada cartão não contêm valores iguais e, em seguida, adiciona o valor do cartão à pontuação total e, no final, imprime a parte inteira da pontuação total.Experimente online! (Nota: o TIO para PHP está quebrado no momento, devido a uma atualização incorreta da versão, mas deve voltar OK)
fonte
Python 3 , 79 bytes
Experimente online!
Python 3 , 118 bytes
Formato de entrada mais legível
Experimente online!
fonte
Kotlin , 159 bytes
O Lambda aceita 1.3456789TJQ0 como entrada. O código externo usa A23456789TJQK como entrada, converte o ás, dois e rei para que a matemática funcione e exibe as cartas e a pontuação.
Experimente online!
fonte