Parcours
/
Go
Go
/
Exercices
/
Blackjack
Blackjack

Blackjack

Exercice d'apprentissage

Introduction

Comme les autres langages, Go propose aussi une instruction switch. Les instructions switch sont une façon plus courte d'écrire de longues instructions if ... else if. Pour créer un switch, on commence par utiliser le mot-clé switch suivi d'une valeur ou d'une expression. On déclare ensuite chacune des conditions avec le mot-clé case. On peut aussi déclarer un cas default, qui s'exécute quand aucune des conditions case précédentes n'a été remplie :

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
} 

Une particularité intéressante des instructions switch, c'est que la valeur qui suit le mot-clé switch peut être omise, et que chaque case peut alors porter une condition booléenne :

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
}

Instructions

Dans cet exercice, on va simuler le premier tour d'une partie de Blackjack.

Tu recevras deux cartes et tu pourras voir la carte visible du croupier. Toutes les cartes sont représentées par une string telle que « ace », « king », « three », « two », etc. Voici la valeur de chaque carte :

carte valeur carte valeur
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 autre 0

Note : couramment, un as peut valoir 1 ou 11, mais pour simplifier, on considérera qu'il ne peut valoir que 11.

Selon tes deux cartes et celle du croupier, il existe une stratégie pour le premier tour de la partie, qui te donne les options suivantes :

  • Rester (S)
  • Tirer (H)
  • Séparer (P)
  • Gagner automatiquement (W)

Même si elle n'est pas encore optimale, tu vas suivre la stratégie que ton ami Alex a mise au point, qui est la suivante :

  • Si tu as une paire d'as, tu dois toujours les séparer.
  • Si tu as un Blackjack (deux cartes dont la somme vaut 21) et que le croupier n'a ni as, ni figure (valet, dame ou roi), ni dix, alors tu gagnes automatiquement. Si le croupier a l'une de ces cartes, tu devras rester et attendre que l'autre carte soit révélée.
  • Si la somme de tes cartes est comprise dans l'intervalle [17, 20], tu dois toujours rester.
  • Si la somme de tes cartes est comprise dans l'intervalle [12, 16], tu dois toujours rester, sauf si le croupier a un 7 ou plus, auquel cas tu dois toujours tirer.
  • Si la somme de tes cartes est de 11 ou moins, tu dois toujours tirer.

1. Calculer la valeur de n'importe quelle carte

Implémente une fonction qui calcule la valeur numérique d'une carte :

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

2. Implémenter la logique de décision du premier tour

Écris une fonction qui implémente la logique de décision décrite ci-dessus :

func FirstTurn(card1, card2, dealerCard string) string

Voici quelques exemples de résultats attendus :

FirstTurn("ace", "ace", "jack") == "P"
FirstTurn("ace", "king", "ace") == "S"
FirstTurn("five", "queen", "ace") == "H"
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Go Exercism

Prêt à commencer Blackjack ?

Inscris-toi sur Exercism pour apprendre et maîtriser Go avec 35 concepts167 exercices, et un vrai mentorat humain, le tout gratuitement.