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

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

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

Вступ

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

let speeding = true;   // Boolean variable 'speeding' set to 'true'
let has_error = false; // Boolean variable 'has_error' set to 'false' 

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

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

Вказівки

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

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

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

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

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

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

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

let knight_awake = true;
can_fast_attack(knight_awake); // false

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

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

let knight_awake = false;
let archer_awake = true;
let prisoner_awake = false;
can_spy(knight_awake, archer_awake, prisoner_awake); // true

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

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

let archer_awake = false;
let prisoner_awake = true;
can_signal_prisoner(archer_awake, prisoner_awake); // true

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

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

let knight_awake = false;
let archer_awake = true;
let prisoner_awake = false;
let dog_present = false;
can_free_prisoner(knight_awake, archer_awake, prisoner_awake, dog_present); // false
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Cairo Exercism

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

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