Rutas
/
F#
F#
/
Ejercicios
/
La infiltración de Annalyn
La infiltración de Annalyn

La infiltración de Annalyn

Ejercicio de aprendizaje

Introducción

Boolean

En F#, los Boolean se representan con el tipo bool, cuyos valores pueden ser true o false.

F# admite tres operadores booleanos: not (NOT), && (AND) y || (OR).

Instrucciones

En este ejercicio, implementarás la lógica de las misiones 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: secuestran a su mejor amigo mientras buscaba bayas en el bosque. Annalyn intentará encontrar y liberar a su mejor amigo, llevándose opcionalmente 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 lo tienen prisionero. Resulta que hay dos secuestradores: un poderoso caballero y un astuto arquero.

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 rato en ponerse la armadura, por lo que estará 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.
  • Hacer señales al prisionero: se pueden hacer señales al prisionero con sonidos de aves si el prisionero está despierto y el arquero está dormido, ya que los arqueros están entrenados en hacer señales con aves 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 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 escapen.
    • Si Annalyn no lleva a su perro, tendrá que ser muy sigilosa, ¡igual que el prisionero! 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 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 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 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:

let knightIsAwake = true
canFastAttack(knightIsAwake)
// => false

2. Comprobar si se puede espiar al grupo

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

let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake)
// => true

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

Implementa la función canSignalPrisoner, que recibe dos valores booleanos que indican si el arquero y el prisionero, respectivamente, están despiertos. La función devuelve true si se pueden hacer señales al prisionero según el estado de los dos personajes. De lo contrario, devuelve false:

let archerIsAwake = false
let prisonerIsAwake = true
canSignalPrisoner(archerIsAwake, prisonerIsAwake)
// => true

4. Comprobar si se puede liberar al prisionero

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

let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
let petDogIsPresent = false
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent)
// => false
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
F# Exercism

¿Listo para empezar La infiltración de Annalyn?

Regístrate en Exercism para aprender y dominar F# con 18 conceptos148 ejercicios y mentoría humana real, todo gratis.