Tracks
/
Go
Go
/
Ejercicios
/
Blackjack
Blackjack

Blackjack

Ejercicio de aprendizaje

Introducción

Como en otros lenguajes, Go también ofrece una sentencia switch. Las sentencias switch son una forma más corta de escribir sentencias largas de if ... else if. Para hacer un switch, empezamos usando la palabra clave switch seguida de un valor o una expresión. Luego 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 sentencias switch es que el valor que va después de la palabra clave switch se puede omitir, y podemos tener condiciones 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 boca arriba 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 other 0

Nota: Comúnmente, las cartas «ace» pueden tomar el valor de 1 o 11, pero por simplicidad asumiremos que solo pueden tomar el valor de 11.

Según tus dos cartas y la carta del crupier, existe una estrategia para el primer turno del juego, 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 cartas «ace», siempre debes dividirlas.
  • Si tienes un Blackjack (dos cartas que suman un valor de 21), y el crupier no tiene un «ace», una carta de figura («jack», «queen» o «king») ni un «ten», ganas automáticamente. Si el crupier tiene alguna de esas cartas, tendrás que plantarte y esperar a que se revele la otra carta.
  • Si tus cartas suman un valor dentro del rango [17, 20], siempre debes plantarte.
  • Si tus cartas suman un valor dentro del rango [12, 16], siempre debes plantarte 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 cualquier carta

Implementa una función para calcular 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 como se describe arriba:

func FirstTurn(card1, card2, dealerCard string) string

Aquí hay 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 una pestaña nuevas
Go Exercism

¿Todo listo para empezar Blackjack?

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