Introdução
Skat é um jogo de cartas tradicional alemão para 3 jogadores. O baralho é composto por 32 cartas: Ás, Rei, Rainha, Valete, 10, 9, 8, 7 em todos os 4 naipes (Paus, Espadas, Copas, Diamantes).
Em cada rodada, um jogador joga sozinho, enquanto os outros dois jogam contra ele. No início de uma rodada, cada jogador recebe 10 cartas, as 2 cartas restantes são chamadas de skat e colocadas de bruços no meio. O jogador solo é determinado por uma fase de licitação. Esta é a parte do jogo com a qual você terá que lidar neste desafio, mais detalhes sobre isso abaixo.
O jogador que vence a fase de licitação se torna o jogador solo. Ele pega o skat e depois derruba duas cartas (que podem ser iguais, a outra equipe não sabe), escolhe o naipe de trunfo e a rodada começa.
Uma rodada consiste em dez truques. O jogador que vencer um truque lidera o próximo até que todas as cartas sejam jogadas. Não vou explicar as regras aqui, mas você deve saber que ter muitos trunfos é bom. Se você quiser aprender sobre as regras, consulte o artigo da Wikipedia que vinculei no início deste post, mas ele não é necessário para esse desafio.
O desafio
Você quer ensinar seus dois filhos a jogar skat. As regras não são tão difíceis, então elas rapidamente entram nela. A única coisa que lhes causa dificuldades é a licitação, calculando especificamente o valor do jogo na mão. Então você decide escrever um pequeno programa que gera o valor máximo do jogo que eles podem oferecer, dada a mão atual.
Calculando o valor do jogo
Toda mão tem um certo valor de jogo. É determinado pela quantidade de Valetes sequenciais que você possui e pelo naipe que deseja escolher como trunfo. Vamos começar com o primeiro fator, as tomadas!
O fator Jack
Os valetes são sempre trunfos e vencem todos os outros trunfos. A ordem de força entre os quatro valetes é:
- Valete de paus (mais alto)
- Valete de espadas
- Valete de Copas
- Valete de ouros (mais baixo)
Na explicação adicional, vou me referir a eles com os números que eu lhes atribuí aqui.
Você se lembra que existe algum tipo de fator que você recebe dos valetes na sua mão que faz parte do valor do jogo? Ótimo! Aqui está como você o obtém:
Esse fator Jack é o número dos principais Jacks (veja a ordem acima) em sequência, mais 1. Portanto, se você tiver todos os 4 Jacks, será 4 + 1 = 5. Se você tiver apenas os 2 primeiros Jacks, será 2 + 1 = 3)
Como alternativa, para tornar as coisas um pouco mais complicadas, o Fator Jack também pode ser o número dos melhores Jacks na sequência que você está perdendo , mais 1. Portanto, se você está perdendo o primeiro, é 1 + 1 = 2. Se você estão faltando ele primeiro 3, é 3 + 1 = 4. Aqui estão alguns exemplos, usando a numeração acima:
[1, 4] -> 1 + 1 = 2
[1, 2, 4] -> 2 + 1 = 3
[2, 3, 4] -> 1 + 1 = 2
[1, 2, 3, 4] -> 4 + 1 = 5
[] -> 4 + 1 = 5
Esse foi o primeiro fator. Aqui está como você obtém o segundo:
O fator de fato do Trump
Este é muito mais simples. O segundo fator é determinado pelo naipe de trunfo que o jogador solo escolhe usando o seguinte mapeamento:
Clubs -> 12
Spades -> 11
Hearts -> 10
Diamonds -> 9
Isso foi fácil, não foi?
O valor do jogo
O valor do jogo é o produto dos dois fatores. Muito fácil você acha? Errado! Enquanto o fator de Jack estiver fixo, o fator de naipe não é. O naipe que você escolhe como trunfo depende da quantidade de trunfos e do valor dos seus cartões que não são trunfos na sua mão. Seria muito complicado explicar como é uma boa mão, então você usará o seguinte algoritmo:
O algoritmo What-Trump-do-I-Pick
Você não precisa participar da licitação. Se você decidir que sua mão é ruim demais para jogar sozinho, basta passar. Sua mão deve corresponder aos seguintes critérios para ser jogável:
Tenha pelo menos 6 trunfos (cartas do naipe de trunfo que você escolhe + o número de Valetes). Se isso for possível para mais de um naipe, escolha aquele que resultaria em mais trunfos. Se ainda houver um empate, escolha o naipe com a classificação mais alta dada acima.
Fora das cartas que não são trunfos, tenha pelo menos 1 Ás.
Se sua mão não corresponder a ambos os critérios, você passará. Se isso acontecer, você exibirá o valor calculado do jogo e o naipe de trunfo escolhido.
Nota curta: Claro que este é um algoritmo muito simplificado. Há muita estratégia e experiência em julgar uma mão do que poderíamos cobrir em um desafio como este.
Entrada
Cada cartão tem um identificador único. A primeira parte é o terno ( C Lubs, S PAdES, H earts, D iamonds), a segunda parte é o valor que é determinado por este mapeamento:
Ace -> A
King -> K
Queen -> Q
Jack -> J
10 -> 0
9 -> 9
8 -> 8
7 -> 7
Ambas as partes combinadas formam um cartão. O valor vem primeiro, depois o naipe. Você pode levar os cartões em qualquer formato que desejar.
Resultado
Se a mão é jogável, mostre o valor do jogo e o naipe escolhido (a ordem não importa). Caso contrário, digite "pass".
Regras
- Como mencionado, você pode levar a entrada no formato mais conveniente para você. Exemplos veja abaixo nos casos de teste.
- A entrada pode ser fornecida por argumentos de linha de comando, entrada do usuário ou argumentos de função.
- A saída pode ser fornecida como valor de retorno ou apenas pode ser impressa na tela.
- Os cartões na entrada não podem ser pedidos de forma alguma. Seu programa deve ser capaz de lidar com qualquer pedido de cartão aleatório.
- Menor número de bytes ganhos!
Casos de teste
A entrada nos casos de teste será uma lista de cadeias de caracteres de 2 caracteres.
1. ["JC", "JS", "JD", "AC", "KC", "9C", "AS", "7H", "QD", "8D"] -> 36 Clubs
2. ["JD", "AS", "0S", "KS", "QS", "9S", "8S", "AD", "8C", "9C"] -> 44 Spades
3. ["JH", "JD", "0S", "KS", "9C", "8C", "QH", "KH", "AD", "9D"] -> pass
4. ["JD", "AS", "KS", "QS", "0S", "9S", "8D", "7D", "0C", "QH"] -> pass
Explicação:
- Dois valetes seguidos com tacos como trunfo. Portanto, o valor do jogo é 3 x 12 = 36
- Três valetes seguidos com Spades como trunfo. Portanto, o valor do jogo é 4 x 11 = 44
- Somente um máximo de 4 trunfos é possível, então você passará.
- Seis trunfos com espadas, mas nenhum ás que não seja trunfo, então você passará.
Se algumas regras não forem claras, vá em frente e comente. Eu cresci com este jogo, então é difícil para mim julgar se descrevi tudo com detalhes suficientes.
E agora ... Feliz codificação!
edit: Como apontado nos comentários (graças a isaacg), existe uma regra que conta os seguintes trunfos após os 4 Valetes para o "fator Valete" para que ele possa subir até 11. Para manter esse desafio simples e para não confundir as pessoas, as regras que propus originalmente permanecerão como estão. Portanto, o fator máximo permanece em 5.
fonte
Respostas:
Python 2, exemplo de implementação
Como ainda não há envios, escrevi um exemplo de implementação em Python. O formato de entrada é o mesmo que nos casos de teste do desafio.
Talvez isso motive vocês a seguir em frente, não é tão difícil :)
fonte
Java, 256 bytes
Toma de entrada como um array de arrays de caracteres no formato
A4
, onde4
é Clubs ,3
é Spades ,2
é corações e1
é Diamonds . A saída é36 4
para uma oferta de 36 com os clubes do trunfo ,p
para aprovação.Experimente online aqui .
Versão não destruída:
fonte
C, 235 bytes
Porta da minha resposta Java .
Experimente online aqui .
Toma entrada como um array de caracteres no formato
A4
, onde4
é Clubs ,3
é Spades ,2
é corações e1
é Diamonds . A saída é36 4
para uma oferta de 36 com os clubes do trunfo ,p
para aprovação.Versão não destruída:
fonte