Track
/
Go
Go
/
Esercizi
/
Blackjack
Blackjack

Blackjack

Esercizio di apprendimento

Introduzione

Come altri linguaggi, anche Go mette a disposizione un'istruzione switch. Le istruzioni switch sono un modo più breve per scrivere lunghe istruzioni if ... else if. Per creare uno switch, iniziamo usando la parola chiave switch seguita da un valore o da un'espressione. Poi dichiariamo ciascuna delle condizioni con la parola chiave case. Possiamo anche dichiarare un caso default, che verrà eseguito quando nessuna delle condizioni case precedenti è stata soddisfatta:

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
} 

Una cosa interessante delle istruzioni switch è che il valore dopo la parola chiave switch può essere omesso, e per ogni case possiamo avere condizioni booleane:

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
}

Istruzioni

In questo esercizio simuleremo il primo turno di una partita a Blackjack.

Riceverai due carte e potrai vedere la carta scoperta del banco. Tutte le carte sono rappresentate da una stringa come "ace", "king", "three", "two", ecc. I valori di ciascuna carta sono:

card value card value
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 other 0

Nota: di solito gli ace possono valere 1 o 11, ma per semplicità assumeremo che possano valere solo 11.

A seconda delle tue due carte e della carta del banco, esiste una strategia per il primo turno di gioco, in cui hai le seguenti opzioni:

  • Stare (S)
  • Chiedere carta (H)
  • Separare (P)
  • Vincere automaticamente (W)

Anche se non è ancora ottimale, seguirai la strategia che il tuo amico Alex sta sviluppando, che è la seguente:

  • Se hai una coppia di ace, devi sempre separarli.
  • Se hai un Blackjack (due carte che sommano a un valore di 21) e il banco non ha un ace, una carta di figura (Jack/Queen/King) o un dieci, vinci automaticamente. Se invece il banco ha una di quelle carte, dovrai stare e aspettare che venga rivelata l'altra carta.
  • Se le tue carte sommano a un valore compreso nell'intervallo [17, 20], dovresti sempre stare.
  • Se le tue carte sommano a un valore compreso nell'intervallo [12, 16], dovresti sempre stare, a meno che il banco non abbia un 7 o più: in quel caso dovresti sempre chiedere carta.
  • Se le tue carte sommano a 11 o meno, dovresti sempre chiedere carta.

1. Calcolare il valore di una carta qualsiasi

Implementa una funzione per calcolare il valore numerico di una carta:

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

2. Implementare la logica decisionale per il primo turno

Scrivi una funzione che implementi la logica decisionale descritta sopra:

func FirstTurn(card1, card2, dealerCard string) string

Ecco alcuni esempi dei risultati attesi:

FirstTurn("ace", "ace", "jack") == "P"
FirstTurn("ace", "king", "ace") == "S"
FirstTurn("five", "queen", "ace") == "H"
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Go Exercism

Vuoi iniziare Blackjack?

Iscriviti a Exercism per imparare e padroneggiare Go con 35 concetti167 esercizi e il mentoring di persone reali, tutto gratis.