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

L'infiltration d'Annalyn

Exercice d'apprentissage

Introduction

Booléens

Le type Bool est l'une des briques de base du langage. Il sert à décrire si quelque chose est vrai ou faux, avec les valeurs True et False correspondantes.

Les booléens peuvent être combinés avec les opérateurs && « et » et || « ou », et niés avec la fonction not.

Les booléens sont aussi extrêmement utiles pour créer, dans le code, des branches qui ne sont exécutées que si certaines conditions sont remplies. En Elm, cela se fait avec une expression if-then-else, utilisée comme suit.

if someCondition || (someOtherCondition && anotherCondition) then
    doSomething
else
    doSomethingElse

Instructions

Dans cet exercice, tu vas implémenter la logique de quête d'un nouveau jeu de rôle (RPG) qu'un ami développe. Le personnage principal du jeu est Annalyn, une fille courageuse accompagnée d'un chien de compagnie féroce et fidèle. Malheureusement, le malheur frappe : 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 pendant un moment la piste de son meilleur ami, elle trouve le camp où celui-ci est retenu prisonnier. Il s'avère qu'il y a deux ravisseurs : un chevalier puissant et un archer rusé.

Une fois les ravisseurs repérés, Annalyn réfléchit aux actions suivantes qu'elle peut entreprendre :

  • Attaque rapide : une attaque rapide est possible si le chevalier dort, car il met du temps à enfiler son armure et sera donc vulnérable.
  • Attaque furtive : si Annalyn atteint le chevalier endormi sans être repérée, elle inflige 12 dégâts avec une attaque furtive. Sinon, elle n'inflige que 7 dégâts au chevalier.
  • Espionnage : le groupe peut être espionné si au moins l'un de ses membres est réveillé. Sinon, l'espionnage est une perte de temps.
  • Faire signe au prisonnier : on peut faire signe au prisonnier avec des cris d'oiseaux si le prisonnier est réveillé et que l'archer dort, car les archers sont entraînés à imiter les signaux des oiseaux et pourraient donc 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 d'une de deux façons :
    • Si Annalyn a son chien avec elle, elle peut sauver 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, elle et le prisonnier devront être très discrets ! Annalyn peut libérer le prisonnier si celui-ci est réveillé et que le chevalier et l'archer dorment tous les deux, mais si le prisonnier dort, il ne peut pas être sauvé : celui-ci serait surpris par l'apparition soudaine d'Annalyn et réveillerait le chevalier et l'archer.

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

1. Vérifie si une attaque rapide est possible

Implémente la fonction canFastAttack qui prend une valeur booléenne indiquant si le chevalier est réveillé. Cette fonction renvoie True si une attaque rapide est possible selon l'état du chevalier. Sinon, elle renvoie False :

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 respectivement si le chevalier, l'archer et le prisonnier sont réveillés. La fonction renvoie True si le groupe peut être espionné, selon l'état des trois personnages. Sinon, elle renvoie False :

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False

canSpy knightIsAwake archerIsAwake prisonerIsAwake
    --> True

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

Implémente la fonction canSignalPrisoner qui prend deux valeurs booléennes indiquant respectivement si l'archer et le prisonnier sont réveillés. La fonction renvoie True si l'on peut faire signe au prisonnier, selon l'état des deux personnages. Sinon, elle renvoie False :

archerIsAwake = False
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 respectivement si le chevalier, l'archer et le prisonnier sont ré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é, selon l'état des trois personnages et la présence du chien d'Annalyn. Sinon, elle renvoie False :

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
petDogIsPresent = False

canFreePrisoner knightIsAwake archerIsAwake prisonerIsAwake petDogIsPresent
    --> False

5. Calcule les dégâts qu'une attaque furtive peut infliger

Implémente la fonction stealthAttackDamage qui prend une valeur booléenne indiquant si Annalyn a été repérée. Cette fonction renvoie 7 si elle a été repérée, et 12 sinon.

annalynIsDetected = True

stealthAttackDamage annalynIsDetected
    --> 7
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Elm Exercism

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

Inscris-toi sur Exercism pour apprendre et maîtriser Elm avec 28 concepts110 exercices, et un vrai mentorat humain, le tout gratuitement.