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
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:
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.
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
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
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
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
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
Regístrate en Exercism para aprender y dominar Elm con 28 conceptos110 ejercicios y mentoría humana real, todo gratis.