Треки
/
Go
Go
/
Вправи
/
Блекджек
Блекджек

Блекджек

Навчальна вправа

Вступ

Як й інші мови, Go також надає конструкцію switch. Конструкції switch дають змогу коротше записати довгі конструкції if ... else if. Щоб створити конструкцію switch, ми починаємо з ключового слова switch, після якого йде значення або вираз. Потім ми оголошуємо кожну з умов за допомогою ключового слова case. Ми також можемо оголосити випадок default, який виконається, коли жодна з попередніх умов case не збіглася:

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
} 

Одна цікава особливість конструкцій switch полягає в тому, що значення після ключового слова switch можна пропустити, і для кожного case можна використовувати булеві умови (англ. Boolean):

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
}

Вказівки

У цій вправі ми змоделюємо перший хід гри в блекджек.

Ми отримаємо дві карти та зможемо побачити відкриту карту дилера. Усі карти представлені рядком тексту (англ. string), наприклад «ace», «king», «three», «two» тощо. Значення кожної карти такі:

карта значення карта значення
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

Примітка: Зазвичай карти «ace» можуть мати значення 1 або 11, але для простоти ми припустимо, що вони можуть мати лише значення 11.

Залежно від наших двох карт і карти дилера, існує стратегія для першого ходу гри, у якій ми маємо такі варіанти:

  • Зупинитися (S)
  • Взяти карту (H)
  • Розділити (P)
  • Автоматично виграти (W)

Хоча вона ще не оптимальна, ми будемо дотримуватися стратегії, яку розробив наш друг Алекс, а саме:

  • Якщо у нас пара «ace», ми завжди повинні їх розділити.
  • Якщо у нас блекджек (дві карти, що в сумі дають 21), і в дилера немає «ace», фігурної карти («jack»/«queen»/«king») або «ten», тоді ми автоматично виграємо. Якщо ж у дилера є якась із цих карт, тоді нам доведеться зупинитися й чекати, поки відкриють іншу карту.
  • Якщо наші карти в сумі дають значення в діапазоні [17, 20], ми завжди повинні зупинитися.
  • Якщо наші карти в сумі дають значення в діапазоні [12, 16], ми завжди повинні зупинитися, якщо в дилера немає 7 або вище; якщо в дилера є 7 або вище, ми завжди повинні взяти карту.
  • Якщо наші карти в сумі дають 11 або менше, ми завжди повинні взяти карту.

1. Обчисліть значення будь-якої карти

Реалізуйте функцію для обчислення числового значення карти:

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

2. Реалізуйте логіку рішення для першого ходу

Напишіть функцію, яка реалізує логіку рішення, описану вище:

func FirstTurn(card1, card2, dealerCard string) string

Ось кілька прикладів очікуваних результатів:

FirstTurn("ace", "ace", "jack") == "P"
FirstTurn("ace", "king", "ace") == "S"
FirstTurn("five", "queen", "ace") == "H"
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Go Exercism

Час розпочати Блекджек?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Go, а також 35 концепцій167 вправ та справжнє наставництво від людей, і все це безкоштовно.