Trilhas
/
Go
Go
/
Exercícios
/
Blackjack
Blackjack

Blackjack

Exercício de aprendizagem

Introdução

Assim como outras linguagens, Go também oferece uma instrução switch. Instruções switch são uma forma mais curta de escrever instruções if ... else if longas. Para criar um switch, começamos com a palavra-chave switch seguida de um valor ou de uma expressão. Depois, declaramos cada uma das condições com a palavra-chave case. Também podemos declarar um caso default, que roda quando nenhuma das condições case anteriores corresponde:

operatingSystem := "windows"

switch operatingSystem {
case "windows":
    // do something if the operating system is windows
case "linux":
    // do something if the operating system is linux
case "macos":
    // do something if the operating system is macos
default:
    // do something if the operating system is none of the above
} 

Uma coisa interessante sobre as instruções switch é que o valor depois da palavra-chave switch pode ser omitido, e podemos ter condições booleanas para cada case:

age := 21

switch {
case age > 20 && age < 30:
    // do something if age is between 20 and 30
case age == 10:
    // do something if age is equal to 10
default:
    // do something else for every other case
}

Instruções

Neste exercício, vamos simular a primeira rodada de um jogo de Blackjack.

Você vai receber duas cartas e vai poder ver a carta aberta do dealer. Todas as cartas são representadas por uma string como "ace", "king", "three", "two", etc. Os valores de cada carta são:

carta valor carta valor
ace 11 eight 8
two 2 nine 9
three 3 ten 10
four 4 jack 10
five 5 queen 10
six 6 king 10
seven 7 outra 0

Observação: Normalmente, os ases podem valer 1 ou 11, mas, por simplicidade, vamos assumir que só podem valer 11.

Dependendo das suas duas cartas e da carta do dealer, existe uma estratégia para a primeira rodada do jogo, na qual você tem as seguintes opções:

  • Parar (S)
  • Pedir carta (H)
  • Dividir (P)
  • Ganhar automaticamente (W)

Embora ainda não seja ideal, você vai seguir a estratégia que seu amigo Alex vem desenvolvendo, que é a seguinte:

  • Se você tiver um par de ases, deve sempre dividi-los.
  • Se você tiver um Blackjack (duas cartas que somam 21), e o dealer não tiver um ás, uma carta de figura (Valete/Dama/Rei) ou um dez, você ganha automaticamente. Se o dealer tiver alguma dessas cartas, você terá que parar e esperar a revelação da outra carta.
  • Se suas cartas somarem um valor no intervalo [17, 20], você deve sempre parar.
  • Se suas cartas somarem um valor no intervalo [12, 16], você deve sempre parar, a menos que o dealer tenha um 7 ou mais, caso em que você deve sempre pedir carta.
  • Se suas cartas somarem 11 ou menos, você deve sempre pedir carta.

1. Calcule o valor de qualquer carta

Implemente uma função para calcular o valor numérico de uma carta:

value := ParseCard("ace")
fmt.Println(value)
// Output: 11

2. Implemente a lógica de decisão para a primeira rodada

Escreva uma função que implemente a lógica de decisão descrita acima:

func FirstTurn(card1, card2, dealerCard string) string

Aqui estão alguns exemplos dos resultados esperados:

FirstTurn("ace", "ace", "jack") == "P"
FirstTurn("ace", "king", "ace") == "S"
FirstTurn("five", "queen", "ace") == "H"
Editar via GitHub O link abre em uma nova janela ou aba
Go Exercism

Tudo pronto para começar Blackjack?

Crie sua conta no Exercism para aprender e dominar Go com 35 conceitos167 exercícios e mentoria humana de verdade, tudo de graça.