Треки
/
Go
Go
/
Вправи
/
Проникнення Анналін
Проникнення Анналін

Проникнення Анналін

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

Вступ

Булеві значення (англ. Boolean) у Go представлені попередньо оголошеним булевим типом bool, значеннями якого можуть бути true або false. Це визначений тип.

var closed bool    // boolean variable 'closed' implicitly initialized with 'false'
speeding := true   // boolean variable 'speeding' initialized with 'true'
hasError := false  // boolean variable 'hasError' initialized with 'false' 

Go підтримує три логічні оператори, які зводять вирази до булевих значень, повертаючи true або false.

Оператор Що це означає
&& (логічне і) Дає правду, якщо обидва твердження правдиві.
|| (логічне або) Дає правду, якщо правдиве принаймні одне твердження.
! (логічне заперечення) Дає правду лише тоді, коли твердження неправдиве.

Вказівки

У цій вправі ми реалізуємо логіку квестів для нової рольової гри (RPG), яку розробляє друг. Головна героїня гри - Анналін, відважна дівчина з грізним і відданим псом. На жаль, трапляється лихо: її найкращого друга викрали, коли він шукав у лісі ягоди. Анналін спробує знайти й визволити найкращого друга, а може, й узяти з собою в цей квест свого пса.

Витративши деякий час на пошуки сліду найкращого друга, вона знаходить табір, у якому його тримають у полоні. Виявляється, викрадачів двоє: могутній лицар і хитрий лучник.

Знайшовши викрадачів, Анналін обмірковує, які з наведених дій вона може вжити:

  • Швидка атака: швидку атаку можна здійснити, якщо лицар спить, бо йому потрібен час, щоб одягнути обладунки, тож він буде вразливим.
  • Підглядання: за групою можна підглядати, якщо хоч один із них не спить. Інакше підглядання - тільки марна трата часу.
  • Подати сигнал полоненому: полоненому можна подати сигнал пташиними звуками, якщо він не спить, а лучник спить, бо лучники навчені пташиних сигналів і могли б перехопити повідомлення.
  • Визволити полоненого: Анналін може спробувати потайки пробратися в табір і визволити полоненого. Це ризикована справа, і вона може вдатися лише одним із двох способів:
    • Якщо Анналін узяла з собою свого пса, вона може врятувати полоненого, коли лучник спить. Лицар боїться пса, а лучник не встигне підготуватися, перш ніж Анналін і полонений утечуть.
    • Якщо ж Анналін без пса, то їй і полоненому доведеться діяти дуже потайки! Анналін може визволити полоненого, якщо той не спить, а лицар і лучник обоє сплять, але якщо полонений спить, його врятувати не вдасться: він злякається раптової появи Анналін і розбудить лицаря та лучника.

На нас чекають чотири завдання: реалізувати логіку, яка визначає, чи доступні ці дії, залежно від стану трьох персонажів, знайдених у лісі, і від того, чи присутній пес Анналін.

1. Перевірте, чи можна здійснити швидку атаку

Визначте функцію CanFastAttack(), яка приймає булеве значення (англ. Boolean), що вказує, чи не спить лицар. Функція повертає true, якщо швидку атаку можна здійснити залежно від стану лицаря. Інакше повертає false:

var knightIsAwake = true
fmt.Println(CanFastAttack(knightIsAwake))
// Output: false

2. Перевірте, чи можна підглядати за групою

Визначте функцію CanSpy(), яка приймає три булеві значення, що вказують, чи не сплять, відповідно, лицар, лучник і полонений. Функція повертає true, якщо за групою можна підглядати, залежно від стану цих трьох персонажів. Інакше повертає false:

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
fmt.Println(CanSpy(knightIsAwake, archerIsAwake, prisonerIsAwake))
// Output: true

3. Перевірте, чи можна подати сигнал полоненому

Визначте функцію CanSignalPrisoner(), яка приймає два булеві значення, що вказують, чи не сплять, відповідно, лучник і полонений. Функція повертає true, якщо полоненому можна подати сигнал, залежно від стану цих двох персонажів. Інакше повертає false:

var archerIsAwake = false
var prisonerIsAwake = true
fmt.Println(CanSignalPrisoner(archerIsAwake, prisonerIsAwake))
// Output: true

4. Перевірте, чи можна визволити полоненого

Визначте функцію CanFreePrisoner(), яка приймає чотири булеві значення. Перші три параметри вказують, чи не сплять, відповідно, лицар, лучник і полонений. Останній параметр вказує, чи присутній пес Анналін. Функція повертає true, якщо полоненого можна визволити, залежно від стану трьох персонажів і присутності пса Анналін. Інакше повертає false:

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
var petDogIsPresent = false
fmt.Println(CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent))
// Output: false
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Go Exercism

Час розпочати Проникнення Анналін?

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