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

L'infiltration d'Annalyn

Exercice d'apprentissage

Introduction

En Clojure, les booléens sont représentés par true ou false.

Les fonctions prédicats (les fonctions qui renvoient un booléen) se terminent généralement par un point d'interrogation (?), mais ce n'est qu'une convention.

La bibliothèque de base inclut des fonctions pour les opérateurs logiques tels que not, and et or.

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, le malheur frappe : sa meilleure amie a été enlevée alors qu'elle cherchait des baies dans la forêt. Annalyn va tenter de retrouver et de libérer son amie, en emmenant éventuellement son chien avec elle dans cette quête.

Après avoir suivi un moment la piste, Annalyn découvre le camp où son amie est retenue prisonnière. 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 est possible si le chevalier dort, car il lui faut du temps pour enfiler son armure, ce qui le laisse vulnérable.
  • Espionnage : 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 faire signe au prisonnier à l'aide de signaux d'oiseaux si le prisonnier est éveillé et que l'archer dort. Les archers sont formés aux signaux d'oiseaux et pourraient intercepter le message s'ils sont éveillés.
  • Libérer le prisonnier : Annalyn peut tenter de se faufiler dans le camp pour libérer le prisonnier. C'est risqué et ne peut réussir que 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 doivent être 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. Cependant, si le prisonnier dort, impossible de le sauver, car le prisonnier serait surpris par l'apparition soudaine d'Annalyn et réveillerait le chevalier et l'archer.

Tu as quatre tâches à accomplir : implémenter la logique qui détermine si les actions ci-dessus sont possibles, en fonction de l'état des trois personnages 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 can-fast-attack? qui prend une valeur booléenne indiquant si le chevalier est éveillé. La fonction renvoie true si une attaque rapide est possible en fonction de l'état du chevalier. Sinon, elle renvoie false :

(def knight-awake? true)

(can-fast-attack? knight-awake?)
;;=> false

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

Implémente la fonction can-spy? 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 :

(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)

(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true

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

Implémente la fonction can-signal-prisoner? 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 faire signe au prisonnier, en fonction de l'état des deux personnages. Sinon, elle renvoie false :

(def archer-awake? false)
(def prisoner-awake? true)

(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true

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

Implémente la fonction can-free-prisoner? 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 :

(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(def dog-present? false)

(can-free-prisoner? knight-awake? archer-awake? prisoner-awake? dog-present?)
;;=> false
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Clojure Exercism

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

Inscris-toi sur Exercism pour apprendre et maîtriser Clojure avec 12 concepts105 exercices, et un vrai mentorat humain, le tout gratuitement.