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

La infiltración de Annalyn

Ejercicio de aprendizaje

Introducción

Boolean

El tipo Bool es uno de los bloques de construcción del lenguaje. Su objetivo es describir si algo es verdadero o falso, con los respectivos valores True y False.

Los valores Boolean se pueden combinar con los operadores && («Y») y || («O»), y se pueden negar con la función not.

Los valores Boolean también son muy útiles para crear ramas en tu código que solo se ejecuten si se cumplen ciertas condiciones. En Elm, esto se hace con una expresión if-then-else, que se usa de la siguiente manera.

if someCondition || (someOtherCondition && anotherCondition) then
    doSomething
else
    doSomethingElse

Instrucciones

En este ejercicio, implementarás la lógica de la misión de un nuevo juego de rol que un amigo está desarrollando. La protagonista del juego es Annalyn, una chica valiente que tiene como mascota a un perro feroz y leal. Por desgracia, llega el desastre: su mejor amigo fue secuestrado mientras buscaba bayas en el bosque. Annalyn intentará encontrar y liberar a su mejor amigo, y puede llevar a su perro con ella en esta misión.

Después de pasar un tiempo siguiendo el rastro de su mejor amigo, encuentra el campamento en el que está prisionero. 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 realizar:

  • Ataque rápido: se puede hacer un ataque rápido si el caballero está durmiendo, ya que tarda un tiempo en ponerse la armadura, así que estará vulnerable.
  • Ataque sigiloso: si Annalyn llega hasta el caballero dormido sin ser detectada, le hace 12 de daño con un ataque sigiloso. De lo contrario, solo le hace 7 de daño al caballero.
  • Espiar: se puede espiar al grupo si al menos uno de ellos está despierto. De lo contrario, espiar es una pérdida de tiempo.
  • Dar la señal al prisionero: se le puede dar la señal al prisionero usando sonidos de aves si el prisionero está despierto y el arquero está durmiendo, ya que los arqueros están entrenados en el uso de señales con aves, así que podrían interceptar el mensaje.
  • Liberar al prisionero: Annalyn puede intentar escabullirse en el campamento para liberar al prisionero. Esto es arriesgado y solo puede salir bien de una de dos maneras:
    • Si Annalyn lleva a su perro con ella, 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, ¡ella y el prisionero tendrán que ser muy sigilosos! Annalyn puede liberar al prisionero si el prisionero está despierto y el caballero y el arquero están durmiendo, pero si el prisionero está dormido no se lo puede rescatar: el prisionero se llevaría un susto con la aparición repentina de Annalyn y despertaría al caballero y al arquero.

Tienes cinco 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. Verifica si se puede hacer un ataque rápido

Implementa la función canFastAttack, que recibe un valor Boolean 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:

knightIsAwake = True

canFastAttack knightIsAwake
    --> False

2. Verifica si se puede espiar al grupo

Implementa la función canSpy, 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:

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False

canSpy knightIsAwake archerIsAwake prisonerIsAwake
    --> True

3. Verifica si se le puede dar la señal al prisionero

Implementa la función canSignalPrisoner, 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 dar la señal al prisionero, según el estado de los dos personajes. De lo contrario, devuelve False:

archerIsAwake = False
prisonerIsAwake = True

canSignalPrisoner archerIsAwake prisonerIsAwake
    --> True

4. Verifica si se puede liberar al prisionero

Implementa la función canFreePrisoner, 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 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:

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
petDogIsPresent = False

canFreePrisoner knightIsAwake archerIsAwake prisonerIsAwake petDogIsPresent
    --> False

5. Cuenta el daño que podría hacer un ataque sigiloso

Implementa la función stealthAttackDamage, que recibe un valor Boolean que indica si Annalyn fue detectada. Esta función devuelve 7 si fue detectada y 12 en caso contrario.

annalynIsDetected = True

stealthAttackDamage annalynIsDetected
    --> 7
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Elm Exercism

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

Regístrate en Exercism para aprender y dominar Elm con 28 conceptos110 ejercicios y mentoría humana real, todo gratis.