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

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

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

Вступ

Булеві значення (англ. Boolean) у Clojure позначаються true або false.

Функції-предикати (функції, які повертають булеве значення) зазвичай закінчуються знаком питання (?), але це лише домовленість.

Основна бібліотека містить функції для логічних операторів, як-от not, and й or.

Вказівки

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

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

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

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

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

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

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

(def knight-awake? true)

(can-fast-attack? knight-awake?)
;;=> false

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

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

(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)

(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true

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

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

(def archer-awake? false)
(def prisoner-awake? true)

(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true

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

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

(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(def dog-present? false)

(can-free-prisoner? knight-awake? archer-awake? prisoner-awake? dog-present?)
;;=> false
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Clojure Exercism

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

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