Parcours
/
Go
Go
/
Exercices
/
L'infiltration d'Annalyn
L'infiltration d'Annalyn

L'infiltration d'Annalyn

Exercice d'apprentissage

Introduction

En Go, les booléens sont représentés par le type booléen prédéclaré bool, dont les valeurs peuvent être soit true, soit false. C'est un type défini.

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 prend en charge trois opérateurs logiques, qui évaluent des expressions en valeurs booléennes et renvoient soit true, soit false.

Opérateur Ce que cela signifie
&& (et) L'expression est vraie si les deux assertions sont vraies.
|| (ou) L'expression est vraie si au moins une assertion est vraie.
! (pas) L'expression est vraie seulement si l'assertion est fausse.

Instructions

Dans cet exercice, tu vas implémenter la logique de quête d'un nouveau jeu de rôle développé par un ami. Le personnage principal du jeu est Annalyn, une jeune fille courageuse accompagnée d'un chien de compagnie féroce et fidèle. Malheureusement, un malheur survient : son meilleur ami a été enlevé alors qu'il cherchait des baies dans la forêt. Annalyn va tenter de le retrouver et de le libérer, en emmenant éventuellement son chien avec elle dans cette quête.

Après avoir suivi la piste de son meilleur ami pendant un moment, elle trouve le camp où celui-ci est retenu prisonnier. Il s'avère qu'il y a deux ravisseurs : un puissant chevalier et un archer rusé.

Ayant trouvé les ravisseurs, Annalyn se demande laquelle des actions suivantes elle peut entreprendre :

  • Attaque rapide : une attaque rapide peut être menée si le chevalier dort, car il lui faut du temps pour enfiler son armure, et il sera donc vulnérable.
  • Espionner : on peut espionner le groupe si au moins l'un d'eux est éveillé. Sinon, espionner est une perte de temps.
  • Signaler au prisonnier : on peut signaler sa présence au prisonnier à l'aide de sons d'oiseaux si le prisonnier est éveillé et que l'archer dort, car les archers sont formés au langage des oiseaux et pourraient intercepter le message.
  • Libérer le prisonnier : Annalyn peut tenter de s'introduire discrètement dans le camp pour libérer le prisonnier. C'est une entreprise risquée qui ne peut réussir que de deux façons :
    • Si Annalyn a son chien avec elle, elle peut délivrer le prisonnier si l'archer dort. Le chevalier a peur du chien et l'archer n'aura pas le temps de se préparer avant qu'Annalyn et le prisonnier ne puissent s'échapper.
    • Si Annalyn n'a pas son chien, alors elle et le prisonnier doivent se montrer très discrets ! Annalyn peut libérer le prisonnier si celui-ci est éveillé et que le chevalier et l'archer dorment tous les deux, mais si le prisonnier dort, il ne peut pas être secouru : surpris par l'apparition soudaine d'Annalyn, il réveillerait le chevalier et l'archer.

Tu as quatre tâches : implémenter la logique qui détermine si les actions ci-dessus sont possibles en fonction de l'état des trois personnages trouvés dans la forêt et de la présence ou non du chien d'Annalyn.

1. Vérifie si une attaque rapide est possible

Définis la fonction CanFastAttack() qui prend une valeur booléenne indiquant si le chevalier est éveillé. Cette fonction renvoie true si une attaque rapide est possible en fonction de l'état du chevalier. Sinon, elle renvoie false :

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

2. Vérifie si le groupe peut être espionné

Définis la fonction CanSpy() qui prend trois valeurs booléennes, indiquant respectivement si le chevalier, l'archer et le prisonnier sont éveillés. La fonction renvoie true si le groupe peut être espionné, en fonction de l'état des trois personnages. Sinon, elle renvoie false :

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

3. Vérifie si l'on peut signaler au prisonnier

Définis la fonction CanSignalPrisoner() qui prend deux valeurs booléennes, indiquant respectivement si l'archer et le prisonnier sont éveillés. La fonction renvoie true si l'on peut signaler sa présence au prisonnier, en fonction de l'état des deux personnages. Sinon, elle renvoie false :

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

4. Vérifie si le prisonnier peut être libéré

Définis la fonction CanFreePrisoner() qui prend quatre valeurs booléennes. Les trois premiers paramètres indiquent respectivement si le chevalier, l'archer et le prisonnier sont éveillés. Le dernier paramètre indique si le chien d'Annalyn est présent. La fonction renvoie true si le prisonnier peut être libéré en fonction de l'état des trois personnages et de la présence du chien d'Annalyn. Sinon, elle renvoie false :

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
var petDogIsPresent = false
fmt.Println(CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent))
// Output: false
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Go Exercism

Prêt à commencer L'infiltration d'Annalyn ?

Inscris-toi sur Exercism pour apprendre et maîtriser Go avec 34 concepts165 exercices, et un vrai mentorat humain, le tout gratuitement.