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

La infiltración de Annalyn

Ejercicio de aprendizaje

Introducción

Los valores booleanos en Clojure se representan con true o false.

Las funciones predicado (aquellas que devuelven un Boolean) suelen terminar con un signo de interrogación (?), aunque esto es solo una 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 de 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. Por desgracia, la tragedia llama a su puerta: su mejor amiga ha sido secuestrada mientras buscaba bayas en el bosque. Annalyn intentará encontrar y liberar a su amiga, y puede que se lleve a su perro con ella en esta misión.

Tras pasar un tiempo siguiendo el rastro, Annalyn encuentra el campamento en el que está prisionera su amiga. Resulta que hay dos secuestradores: un caballero poderoso y un arquero astuto.

Una vez encontrados los secuestradores, Annalyn se plantea cuál de las siguientes acciones puede llevar a cabo:

  • Ataque rápido: se puede hacer un ataque rápido si el caballero está durmiendo, 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.
  • Enviar una señal al prisionero: se puede enviar una señal al prisionero con sonidos de pájaros si el prisionero está despierto y el arquero está durmiendo. Los arqueros están entrenados en las señales con sonidos de pájaros 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 una acción arriesgada y solo puede salir bien de una de estas dos maneras:
    • Si Annalyn lleva consigo a su perro, 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 puedan escapar.
    • Si Annalyn no lleva a su perro, ¡ella y el prisionero tendrán que ser muy sigilosos! Annalyn puede liberar al prisionero si este está despierto y tanto el caballero como el arquero están durmiendo. Sin embargo, si el prisionero está durmiendo no se le puede rescatar, ya que el prisionero se sobresaltaría con la repentina aparición 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 que se encuentran en el bosque y según si el perro de Annalyn está presente o no.

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

Implementa la función can-fast-attack?, que recibe un valor booleano que indica si el caballero está despierto. Esta 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. Comprobar si se puede espiar al grupo

Implementa la función can-spy?, que recibe tres valores booleanos 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. Comprobar si se puede enviar una señal al prisionero

Implementa la función can-signal-prisoner?, que recibe dos valores booleanos que indican si el arquero y el prisionero, respectivamente, están despiertos. La función devuelve true si se puede enviar 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. Comprobar si se puede liberar al prisionero

Implementa la función can-free-prisoner?, que recibe cuatro valores booleanos. Los tres primeros parámetros indican si el caballero, el arquero y el prisionero, respectivamente, están despiertos. El último parámetro indica si el perro 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 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 pestaña nueva
Clojure Exercism

¿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.