Parcours
/
Clojure
Clojure
/
Exercices
/
Observateur d'oiseaux
Observateur d'oiseaux

Observateur d'oiseaux

Exercice d'apprentissage

Introduction

Un vector en Clojure est une collection séquentielle, indexée et immuable de zéro ou plusieurs valeurs. Cela signifie qu'une fois qu'un vector a été créé, il ne peut plus être modifié. Les fonctions qui agissent sur les vectors renvoient un nouveau vector, tandis que le vector d'origine reste inchangé. Les valeurs d'un vector peuvent être de types hétérogènes. On peut définir un vector comme ceci :

(def empty [])
(def single-value [5])
(def single-value-alternative (vector 5))
(def three-values [1 "a" "b"])

On peut récupérer les éléments d'un vector à l'aide d'un indice. Les vectors de Clojure sont indexés à partir de zéro, ce qui signifie que l'indice du premier élément est toujours zéro :

(def numbers [2 3 5])
;; Read value from vector
(get numbers 2)
;;=> 5
;; Update value in vector
(assoc numbers 2 9)
;;=> [2 3 9]

Le vector d'origine reste inchangé :

numbers
;;=> [2 3 5]

Pour se souvenir de la valeur mise à jour, il faut la transmettre ou la capturer dans un var :

(def updated-numbers
  (assoc numbers 2 9))
(get updated-numbers 2)
;;=> 9

Instructions

Tu es un observateur d'oiseaux passionné et tu notes combien d'oiseaux ont visité ton jardin ces sept derniers jours.

Tu as six tâches, toutes consacrées au nombre d'oiseaux qui ont visité ton jardin.

1. Vérifie les comptes de la semaine dernière

Pour pouvoir comparer, tu gardes toujours une copie des comptes de la semaine dernière à portée de main, à savoir : 0, 2, 5, 3, 7, 8 et 4. Crée un vecteur contenant les comptes de la semaine dernière :

last-week
;;=> [0 2 5 3 7 8 4]

2. Vérifie combien d'oiseaux ont visité le jardin aujourd'hui

Implémente la fonction today pour renvoyer le nombre d'oiseaux qui ont visité ton jardin aujourd'hui. Les comptes sont ordonnés par jour : le premier élément correspond au jour le plus ancien et le dernier au compte d'aujourd'hui.

(def birds-per-day [2 5 0 7 4 1])
(today birds-per-day)
;;=> 1

3. Incrémente le compte d'aujourd'hui

Implémente la fonction inc-bird pour incrémenter le compte d'aujourd'hui :

(inc-bird birds-per-day)
;;=> [2 5 0 7 4 2]

4. Vérifie s'il y a eu un jour sans aucun oiseau

Implémente la fonction prédicat day-without-birds? qui renvoie true si un jour aucun oiseau n'a visité le jardin, et false sinon :

(day-without-birds? birds-per-day)
;;=> true

5. Calcule le nombre d'oiseaux visiteurs pour les premiers jours

Implémente la fonction n-days-count qui renvoie le nombre d'oiseaux qui ont visité ton jardin depuis le début de la semaine, mais limite ce compte au nombre de jours indiqué depuis le début de la semaine.

(n-days-count birds-per-day 4)
;;=> 14

6. Calcule le nombre de journées chargées

Certains jours sont plus chargés que d'autres. Une journée est considérée comme chargée lorsque cinq oiseaux ou plus ont visité ton jardin. Implémente la fonction busy-days pour renvoyer le nombre de journées chargées :

(busy-days birds-per-day)
;;=> 2

7. Vérifie s'il s'agit d'une semaine étrange

Au cours de l'année écoulée, tu as remarqué que certaines semaines forment un même motif étrange, où les comptes alternent entre un et zéro oiseau. Implémente la fonction odd-week? qui renvoie true si le motif de comptage de cette semaine correspond au motif étrange :

(odd-week? [1 0 1 0 1 0 1])
;;=> true
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Clojure Exercism

Prêt à commencer Observateur d'oiseaux ?

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