Rutas
/
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 fundamentales del lenguaje. Su objetivo es describir si algo es verdadero o falso, con los respectivos valores True y False.

Los Boolean se pueden combinar con los operadores «AND» && y «OR» ||, y negar con la función not.

Los Boolean también son enormemente útiles para crear ramificaciones 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 del siguiente modo.

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

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, todo se tuerce: su mejor amigo ha sido secuestrado mientras buscaba bayas en el bosque. Annalyn intentará encontrar y liberar a su mejor amigo, y puede que se lleve a su perro consigo en esta misión.

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

Una vez encontrados los secuestradores, Annalyn se plantea 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 y estará vulnerable.
  • Ataque furtivo: si Annalyn llega hasta el caballero dormido sin ser detectada, el ataque furtivo le hace 12 de daño. 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.
  • Hacer señales al prisionero: se le pueden hacer señales al prisionero con sonidos de pájaros si el prisionero está despierto y el arquero está dormido, ya que los arqueros están entrenados en el lenguaje de los pájaros y podrían interceptar el mensaje.
  • 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 formas:
    • Si Annalyn lleva a su perro, puede rescatar al prisionero si el arquero está dormido. El caballero le tiene miedo al perro y al arquero no le dará tiempo a 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 este está despierto y tanto el caballero como el arquero están dormidos, pero si el prisionero está dormido no se le puede rescatar: 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 hay 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 canFastAttack, que recibe un valor de tipo 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. En caso contrario, devuelve False:

knightIsAwake = True

canFastAttack knightIsAwake
    --> False

2. Comprobar si se puede espiar al grupo

Implementa la función canSpy, que recibe tres valores de tipo 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. En caso contrario, devuelve False:

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False

canSpy knightIsAwake archerIsAwake prisonerIsAwake
    --> True

3. Comprobar si se le pueden hacer señales al prisionero

Implementa la función canSignalPrisoner, que recibe dos valores de tipo Boolean, que indican si el arquero y el prisionero, respectivamente, están despiertos. La función devuelve True si se le pueden hacer señales al prisionero, según el estado de los dos personajes. En caso contrario, devuelve False:

archerIsAwake = False
prisonerIsAwake = True

canSignalPrisoner archerIsAwake prisonerIsAwake
    --> True

4. Comprobar si se puede liberar al prisionero

Implementa la función canFreePrisoner, que recibe cuatro valores de tipo Boolean. 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. En caso contrario, devuelve False:

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

canFreePrisoner knightIsAwake archerIsAwake prisonerIsAwake petDogIsPresent
    --> False

5. Contar el daño que podría hacer un ataque furtivo

Implementa la función stealthAttackDamage, que recibe un valor de tipo Boolean que indica si han detectado a Annalyn. Esta función devuelve 7 si la han detectado y 12 en caso contrario.

annalynIsDetected = True

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

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