Escreva um código para determinar quem ganha um truque de quatro cartas em um jogo de espadas . Menos bytes ganha.
A entrada é uma sequência que lista as quatro cartas jogadas em sequência como TH QC JH 2H
(Dez de Copas, Rainha de Paus, Valete de Copas, Dois de Copas). Uma carta é dada por dois caracteres: um naipe CDHS
e um valor de 23456789TJQKA
. Você está garantido que a entrada é válida e os cartões são distintos.
Você deve gerar um número 1, 2, 3 ou 4 para o vencedor do truque. No exemplo TH QC JH 2H
, o valete de copas vence o truque, então você deve imprimir 3.
Sua entrada e saída devem ser exatamente como descritas, exceto as novas linhas finais são opcionais.
Aqui estão as regras do Spades para ganhar um truque. A carta vencedora é a mais alta das quatro, com algumas ressalvas. Espadas é o trunfo , então qualquer pá supera qualquer outra que não seja pá. O naipe da primeira carta jogada é o naipe principal e somente as cartas desse naipe ou espadas são elegíveis para vencer o truque. As cartas do mesmo naipe são comparadas por seus valores, que são dados em ordem crescente como 23456789TJQKA
.
Casos de teste:
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
fonte
.e
material valha a pena - o usoo
é de 1 caractere mais curto do que eu imagino..e
solução 28. Mas a solução 27 terminou com a)
e, portanto, também tinha 28 bytes. : oops:+@z1"KTA"
para"KTAZ"
, mas em vez de usar as strings, use diretamenteJ"KTAZ"
no início e+@z1J
noJ
.X
opcional (apenas se aeb forem strings). Mas não tenho muita certeza, seXab)
deveria avaliar paraXab_b
(b invertido, seria bom para coisas comoXa"</\>"
) ouXab+tbhb
(b deslocado). Qual sua preferência?CJam,
3433 bytesAlgoritmo
A lógica é simples. Tenho uma classificação personalizada, na qual priorizo primeiro o segundo caractere que representa o naipe. Nisso, Spades obtém a maior prioridade e depois o primeiro conjunto lançado. Descanse todos são
-1
. Então eu classifico o primeiro caractere com a troca deT
comA
eQ
comK
para ter uma classificação lexical.Explicação do código
Primeiro, vamos ver qual é a ordem lexical dos valores de face dos cartões:
Portanto, todos os números estão na posição correta.
J
também está na posição correta. Precisamos trocarK
eQ
eJ
eA
obter ordem lexical.Experimente online aqui
fonte
JavaScript (ES6), 112
Digitalize a lista e retorne a posição do valor mais alto encontrado.
Execute o snippet para testar (no Firefox)
fonte
Perl, 73 bytes
Experimente- me .
Converte os nomes das cartas para que a ordem do valor do jogo siga a ordem alfabética, depois escolhe a mais alta por classificação e a procura na string original para a posição.
fonte
Ruby, 59 + 2 = 61
Com sinalizadores de linha de comando
na
, executefonte
J, 47 bytes
Uso:
Método:
'S[second char of input]AKQJT9876543'
string. Caracteres não encontrados obtêm o valorlast position + 1
implicitamente. Caracteres adicionais têm muito menos valor (value=(16-position)!
).TH_
QC_
9S_
e8S
).(J infelizmente não é possível comparar caracteres ou seqüências de caracteres diretamente. Ele só pode verificar sua igualdade, o que descartou outras abordagens para esse desafio.)
Experimente online aqui.
fonte
C #, 237
Como funciona: itere cada mão para calcular o "valor" do cartão. Armazene o índice mais alto. O valor de uma carta é determinado como a classificação da carta multiplicada por 0 se não for uma pá ou o naipe de abertura, 1 se for a naipe de abertura e 9 se for uma pá, mas não o naipe de abertura. (9 escolhido b / c 2 * 9 = 18> A = 14 e 9 é um único caractere)
fonte
Pitão,
3633 bytesUma abordagem bastante direta, usa a classificação com uma função de tecla personalizada e, em seguida, localiza o índice do valor mais alto.
fonte
e
), você pode obter o último elemento; portanto, encontrar o valor mais alto é apenas classificar, seguido de obter o último elemento.Pitão, 31 bytes
Experimente aqui.
Como funciona:
A maneira correta de ler este procedimento é voltar à frente. O procedimento classifica o cartão desejado até o final da lista, depois o puxa e encontra seu índice na lista original.
cz
: Isso gera a lista de sequências de cartas.c
, chop, normalmente é uma função binária (arity 2), mas quando chamada em apenas uma entrada, serve como.split()
método de string.S
: Aplica o comportamento normal de classificação, que classifica cartões numerados mais baixos antes dos cartões mais altos.ox"TJQKA"hN
: Solicita os cartões pelo índice (x
) na sequência"TJQKA"
da primeira letra do cartão (hN
). Para cartões com números, a primeira letra não é encontrada, fornecendo o resultado-1
. Como a função de classificação de Pyth é estável, a ordem dos cartões numerados não é afetada.o}@z1Z
: Em seguida, ordenamos se o naipe da primeira carta jogada (@z1
) está na carta em questão. Como estáTrue
atrasadoFalse
, isso envia cartas do naipe principal para trás.o}\SN
: É o mesmo que o tipo anterior, mas classifica se a cartaS
está no cartão, enviando espadas para trás.hxczde
: Extrai a última carta classificada desta maneira (e
), encontra seu índice na lista de cartas (xczd
) e aumenta em 1 (h
), fornecendo a localização desejada para o jogador.fonte