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

La infiltración de Annalyn

Ejercicio de aprendizaje

Introducción

Los valores Boolean en Go se representan mediante el tipo booleano predeclarado bool, cuyos valores pueden ser true o false. Es un tipo definido.

var closed bool    // boolean variable 'closed' implicitly initialized with 'false'
speeding := true   // boolean variable 'speeding' initialized with 'true'
hasError := false  // boolean variable 'hasError' initialized with 'false' 

Go admite tres operadores lógicos que pueden evaluar expresiones hasta obtener valores Boolean, devolviendo true o false.

Operador Qué significa
&& (y) Es verdadero si ambas afirmaciones son verdaderas.
|| (o) Es verdadero si al menos una afirmación es verdadera.
! (no) Es verdadero solo si la afirmación es falsa.

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 mejor amiga, pudiendo llevar consigo a su perro en esta misión.

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

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, así 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.
  • Enviar una señal al prisionero: se puede enviar una señal al prisionero con sonidos de aves si este está despierto y el arquero está durmiendo, ya que los arqueros están entrenados en la señalización con aves, así que 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 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, ella y el prisionero tendrán que moverse con mucho sigilo. Annalyn puede liberar al prisionero si este está despierto y tanto el caballero como el arquero están durmiendo, pero si el prisionero está durmiendo no se le puede rescatar: se asustaría con la repentina aparición de Annalyn y despertaría al caballero y al arquero.

Tienes cuatro tareas: implementar la lógica que determina si las acciones anteriores están disponibles en función del estado de los tres personajes que se encuentran en el bosque y de si el perro de Annalyn está presente o no.

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

Define 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:

var knightIsAwake = true
fmt.Println(CanFastAttack(knightIsAwake))
// Output: false

2. Comprobar si se puede espiar al grupo

Define 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:

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
fmt.Println(CanSpy(knightIsAwake, archerIsAwake, prisonerIsAwake))
// Output: true

3. Comprobar si se puede enviar una señal al prisionero

Define 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 puede enviar una señal al prisionero según el estado de los dos personajes. De lo contrario, devuelve false:

var archerIsAwake = false
var prisonerIsAwake = true
fmt.Println(CanSignalPrisoner(archerIsAwake, prisonerIsAwake))
// Output: true

4. Comprobar si se puede liberar al prisionero

Define 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:

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
var petDogIsPresent = false
fmt.Println(CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent))
// Output: false
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Go Exercism

¿Listo para empezar La infiltración de Annalyn?

Regístrate en Exercism para aprender y dominar Go con 34 conceptos165 ejercicios y mentoría humana real, todo gratis.