Значення «правда» і «неправда» представлені типом Bool.
Він містить лише два значення: true та false.
julia> true
true
julia> false
false
У Julia є три булеві оператори.
&& позначає логічне «і».
Він набуває значення true, якщо вирази з обох боків && дорівнюють true.
julia> true && true
true
julia> true && false
false
|| позначає логічне «або».
Він набуває значення true, якщо вираз з будь-якого боку || дорівнює true.
julia> true || true
true
julia> false || true
true
! позначає логічне заперечення.
Він міняє місцями значення true і false.
julia> !true
false
julia> !false
true
Для довших і складніших виразів краще використовувати дужки, щоб чітко показати, що ми маємо на увазі.
julia> (true || false) && (false && true)
false
У цій вправі ми напишемо трохи логіки для відеогри, яку розробляє наш друг. Головну героїню гри звати Анналін, це відважна дівчина з войовничим і відданим псом. Але, на лихо, трапляється біда: її найкращу подругу викрадають, коли вона збирає в лісі ягоди. Анналін спробує знайти і визволити подругу, можливо, взявши з собою пса.
Зрештою Анналін знаходить табір, де тримають її подругу, і зʼясовується, що викрадачів двоє: могутній лицар і хитрий лучник.
Гравцю пропонують кілька варіантів того, що робити далі. Для кожного з чотирьох можливих варіантів потрібно написати функцію, яка підкаже грі, показувати цей варіант чи ні.
Якщо лицар спить, Анналін зможе швидко атакувати табір, перш ніж він як слід прокинеться і встигне вдягнути обладунки.
Реалізуйте функцію з назвою can_do_fast_attack, яка приймає булеве значення (англ. Boolean) і вказує, чи лицар не спить.
Функція повертає true, якщо дія «Швидка атака» доступна залежно від стану персонажа. Інакше повертає false:
julia> knight_awake = true
julia> can_do_fast_attack(knight_awake)
false
За групою можна стежити, якщо хоч один із них не спить. Інакше стеження буде марною тратою часу.
Реалізуйте функцію з назвою can_spy, яка приймає три булеві значення: вони вказують, чи не сплять лицар, лучник і полонянка відповідно.
Функція повертає true, якщо дія «Шпигун» доступна залежно від стану персонажів.
Інакше повертає false:
# Output suppressed from the next 3 lines
julia> knight_awake = false
julia> archer_awake = true
julia> prisoner_awake = false
julia> can_spy(knight_awake, archer_awake, prisoner_awake)
true
Полонянці можна подати сигнал пташиними звуками, якщо вона не спить, а лучник спить. Якщо лучник не спить, подати сигнал безпечно не вдасться, бо лучник теж уміє розпізнавати пташині сигнали.
Реалізуйте функцію з назвою can_signal_prisoner, яка приймає два булеві значення: вони вказують, чи не сплять лучник і полонянка відповідно.
Функція повертає true, якщо дія «Подати сигнал полонянці» доступна залежно від стану персонажів.
Інакше повертає false:
julia> archer_awake = false
julia> prisoner_awake = true
julia> can_signal_prisoner(archer_awake, prisoner_awake)
true
Анналін може спробувати непомітно пробратися до табору, щоб визволити подругу. Це ризикована справа, і вдатися вона може лише одним із двох способів:
Якщо Анналін бере із собою пса, вона може врятувати полонянку, коли лучник спить. Лицар боїться пса, а лучник не встигне підготуватися, перш ніж Анналін і подруга втечуть.
Якщо ж Анналін без пса, то їй і полонянці доведеться бути дуже обережними! Анналін може визволити полонянку, якщо та не спить, а лицар і лучник обоє сплять. Але якщо полонянка спить, урятувати її не вдасться: вона злякається раптової появи Анналін і розбудить лицаря та лучника.
Реалізуйте функцію з назвою can_free_prisoner, яка приймає чотири булеві значення.
Перші три параметри вказують, чи не сплять лицар, лучник і полонянка відповідно.
Останній параметр вказує, чи є поряд пес Анналін.
Функція повертає true, якщо дія «Звільнити полонянку» доступна залежно від стану персонажів. Інакше повертає false:
julia> knight_awake = false
julia> archer_awake = true
julia> prisoner_awake = false
julia> dog_present = false
julia> can_free_prisoner(knight_awake, archer_awake, prisoner_awake, dog_present)
false
Зареєструйтеся на Exercism, щоб вивчати й опановувати Julia, а також 35 концепцій128 вправ та справжнє наставництво від людей, і все це безкоштовно.