Parcours
/
F#
F#
/
Exercices
/
L'infiltration d'Annalyn
L'infiltration d'Annalyn

L'infiltration d'Annalyn

Exercice d'apprentissage

Introduction

Booléens

En F#, les booléens sont représentés par le type bool, dont les valeurs peuvent être soit true, soit false.

F# prend en charge trois opérateurs booléens : not (pas), && (et) et || (ou).

Instructions

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

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

Ayant trouvé les ravisseurs, Annalyn réfléchit aux actions suivantes qu'elle peut entreprendre :

  • Attaque rapide : une attaque rapide peut être effectuée si le chevalier dort, car il lui faut du temps pour enfiler son armure, ce qui le rend vulnérable.
  • Espionner : on peut espionner le groupe si au moins l'un d'entre eux est éveillé. Sinon, espionner est une perte de temps.
  • Signaler le prisonnier : on peut signaler le prisonnier à l'aide de bruits d'oiseaux si le prisonnier est éveillé et que l'archer dort, car les archers sont formés à la signalisation par bruits d'oiseaux et pourraient intercepter le message.
  • Libérer le prisonnier : Annalyn peut essayer de s'introduire discrètement dans le camp pour libérer le prisonnier. C'est une action risquée qui ne peut réussir que de deux façons :
    • Si Annalyn a son chien de compagnie avec elle, elle peut secourir 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 puissent s'échapper.
    • Si Annalyn n'a pas son chien, alors elle et le prisonnier doivent être très discrets ! Annalyn peut libérer le prisonnier si le prisonnier est éveillé et que le chevalier et l'archer dorment tous les deux, mais si le prisonnier dort, il ne peut pas être secouru : l'apparition soudaine d'Annalyn le ferait sursauter et réveillerait le chevalier et l'archer.

Tu as quatre tâches : implémenter la logique pour déterminer si les actions ci-dessus sont disponibles 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 peut être effectuée

Implémente la fonction canFastAttack qui prend une valeur booléenne indiquant si le chevalier est éveillé. Cette fonction renvoie true si une attaque rapide peut être effectuée en fonction de l'état du chevalier. Sinon, elle renvoie false :

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

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

Implémente la fonction canSpy qui prend trois valeurs booléennes indiquant si le chevalier, l'archer et le prisonnier, respectivement, 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 :

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

3. Vérifie si le prisonnier peut être signalé

Implémente la fonction canSignalPrisoner qui prend deux valeurs booléennes indiquant si l'archer et le prisonnier, respectivement, sont éveillés. La fonction renvoie true si le prisonnier peut être signalé, en fonction de l'état des deux personnages. Sinon, elle renvoie false :

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

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

Implémente la fonction canFreePrisoner qui prend quatre valeurs booléennes. Les trois premiers paramètres indiquent si le chevalier, l'archer et le prisonnier, respectivement, 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 :

let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
let petDogIsPresent = false
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent)
// => false
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
F# Exercism

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

Inscris-toi sur Exercism pour apprendre et maîtriser F# avec 18 concepts148 exercices, et un vrai mentorat humain, le tout gratuitement.