Rutas
/
Go
Go
/
Ejercicios
/
Blackjack
Blackjack

Blackjack

Ejercicio de aprendizaje

Introducción

Como otros lenguajes, Go también proporciona una instrucción switch. Las instrucciones switch son una forma más corta de escribir largas instrucciones if ... else if. Para crear un switch, empezamos usando la palabra clave switch seguida de un valor o una expresión. Después declaramos cada una de las condiciones con la palabra clave case. También podemos declarar un caso default, que se ejecutará cuando ninguna de las condiciones case anteriores coincida:

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
} 

Algo interesante de las instrucciones switch es que el valor que va después de la palabra clave switch se puede omitir, y podemos tener condiciones de tipo Boolean 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
}

Instrucciones

En este ejercicio vamos a simular el primer turno de una partida de Blackjack.

Recibirás dos cartas y podrás ver la carta descubierta del crupier. Todas las cartas se representan con un string como «ace», «king», «three», «two», etc. Los valores de cada carta son:

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 otra 0

Nota: Normalmente, los ases pueden tomar el valor 1 u 11, pero por simplificar supondremos que solo pueden tomar el valor 11.

En función de tus dos cartas y de la carta del crupier, existe una estrategia para el primer turno de la partida, en la que tienes las siguientes opciones:

  • Plantarse (S)
  • Pedir carta (H)
  • Dividir (P)
  • Ganar automáticamente (W)

Aunque todavía no es óptima, vas a seguir la estrategia que tu amigo Alex ha estado desarrollando, que es la siguiente:

  • Si tienes una pareja de ases, siempre debes dividirla.
  • Si tienes un Blackjack (dos cartas que suman un valor de 21) y el crupier no tiene un as, una figura (jack/queen/king) o un diez, ganas automáticamente. Si el crupier tiene alguna de esas cartas, tendrás que plantearte y esperar a que se descubra la otra carta.
  • Si tus cartas suman un valor dentro del rango [17, 20], siempre debes plantearte.
  • Si tus cartas suman un valor dentro del rango [12, 16], siempre debes plantearte a menos que el crupier tenga un 7 o más, en cuyo caso siempre debes pedir carta.
  • Si tus cartas suman 11 o menos, siempre debes pedir carta.

1. Calcula el valor de una carta cualquiera

Implementa una función que calcule el valor numérico de una carta:

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

2. Implementa la lógica de decisión para el primer turno

Escribe una función que implemente la lógica de decisión descrita anteriormente:

func FirstTurn(card1, card2, dealerCard string) string

Aquí tienes algunos ejemplos de los resultados esperados:

FirstTurn("ace", "ace", "jack") == "P"
FirstTurn("ace", "king", "ace") == "S"
FirstTurn("five", "queen", "ace") == "H"
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Go Exercism

¿Listo para empezar Blackjack?

Regístrate en Exercism para aprender y dominar Go con 35 conceptos167 ejercicios y mentoría humana real, todo gratis.