En Clojure, los valores Boolean se representan con true o false.
Las funciones predicado (las funciones que devuelven un Boolean) normalmente terminan con un signo de interrogación (?), pero esto es solo por convención.
La biblioteca principal incluye funciones para operadores lógicos como not, and y or.
En este ejercicio, vas a implementar la lógica de la misión para un nuevo juego de rol que está desarrollando un amigo. La protagonista del juego es Annalyn, una chica valiente con un perro feroz y leal como mascota. Por desgracia, ocurre un desastre: su mejor amigo fue secuestrado mientras buscaba bayas en el bosque. Annalyn intentará encontrar y rescatar a su amigo, y puede llevar a su perro con ella en la misión si quiere.
Después de pasar un tiempo siguiendo el rastro, Annalyn encuentra el campamento donde tienen prisionero a su amigo. Resulta que hay dos secuestradores: un caballero poderoso y un arquero astuto.
Tras encontrar a los secuestradores, Annalyn considera cuáles de las siguientes acciones puede llevar a cabo:
Tienes cuatro tareas: implementar la lógica para determinar si las acciones anteriores están disponibles según el estado de los tres personajes en el bosque y si el perro mascota de Annalyn está presente o no.
Implementa la función can-fast-attack?, que recibe un valor Boolean que indica si el caballero está despierto.
La función devuelve true si se puede hacer un ataque rápido según el estado del caballero.
De lo contrario, devuelve false:
(def knight-awake? true)
(can-fast-attack? knight-awake?)
;;=> false
Implementa la función can-spy?, que recibe tres valores Boolean que indican si el caballero, el arquero y el prisionero, respectivamente, están despiertos.
La función devuelve true si se puede espiar al grupo, según el estado de los tres personajes.
De lo contrario, devuelve false:
(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true
Implementa la función can-signal-prisoner?, que recibe dos valores Boolean que indican si el arquero y el prisionero, respectivamente, están despiertos.
La función devuelve true si se le puede hacer una señal al prisionero, según el estado de los dos personajes.
De lo contrario, devuelve false:
(def archer-awake? false)
(def prisoner-awake? true)
(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true
Implementa la función can-free-prisoner?, que recibe cuatro valores Boolean.
Los primeros tres parámetros indican si el caballero, el arquero y el prisionero, respectivamente, están despiertos.
El último parámetro indica si el perro mascota de Annalyn está presente.
La función devuelve true si se puede liberar al prisionero según el estado de los tres personajes y la presencia del perro mascota de Annalyn.
De lo contrario, devuelve 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
Regístrate en Exercism para aprender y dominar Clojure con 12 conceptos105 ejercicios y mentoría humana real, todo gratis.