Tracks
/
Clojure
Clojure
/
Ejercicios
/
La infiltración de Annalyn
La infiltración de Annalyn

La infiltración de Annalyn

Ejercicio de aprendizaje

Introducción

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.

Instrucciones

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:

  • Ataque rápido: se puede hacer un ataque rápido si el caballero está dormido, ya que tarda un tiempo en ponerse la armadura, lo que lo deja vulnerable.
  • Espiar: se puede espiar al grupo si al menos uno de ellos está despierto. De lo contrario, espiar es una pérdida de tiempo.
  • Señalar al prisionero: se le puede hacer una señal al prisionero con sonidos de aves si el prisionero está despierto y el arquero está dormido. Los arqueros están entrenados en las señales con aves y podrían interceptar el mensaje si están despiertos.
  • Liberar al prisionero: Annalyn puede intentar colarse en el campamento para liberar al prisionero. Es algo riesgoso y solo puede salir bien de una de dos maneras:
    • Si Annalyn lleva a su perro mascota, puede rescatar al prisionero si el arquero está dormido. El caballero le tiene miedo al perro y el arquero no tendrá tiempo de prepararse antes de que Annalyn y el prisionero escapen.
    • Si Annalyn no lleva a su perro mascota, entonces ella y el prisionero deben ser muy sigilosos. Annalyn puede liberar al prisionero si el prisionero está despierto y tanto el caballero como el arquero están dormidos. Sin embargo, si el prisionero está dormido, no se lo puede rescatar, ya que el prisionero se asustaría con la aparición repentina de Annalyn y despertaría al caballero y al arquero.

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.

1. Verifica si se puede hacer un ataque rápido

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

2. Verifica si se puede espiar al grupo

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

3. Verifica si se le puede hacer una señal al prisionero

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

4. Verifica si se puede liberar al prisionero

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
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Clojure Exercism

¿Todo listo para empezar La infiltración de Annalyn?

Regístrate en Exercism para aprender y dominar Clojure con 12 conceptos105 ejercicios y mentoría humana real, todo gratis.