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

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

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

Вступ

Булеві значення (англ. Boolean)

У F# булеві значення представлені типом bool, який може набувати значень true або false.

F# підтримує три булеві оператори: not (логічне заперечення), && (логічне і) та || (логічне або).

Вказівки

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

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

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

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

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

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

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

let knightIsAwake = true
canFastAttack(knightIsAwake)
// => false

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

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

let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake)
// => true

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

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

let archerIsAwake = false
let prisonerIsAwake = true
canSignalPrisoner(archerIsAwake, prisonerIsAwake)
// => true

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

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

let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
let petDogIsPresent = false
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent)
// => false
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
F# Exercism

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

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