Parcours
/
Ruby
Ruby
/
Exercices
/
Comptage d'oiseaux
Comptage d'oiseaux

Comptage d'oiseaux

Exercice d'apprentissage

Introduction

Les tableaux

En Ruby, les tableaux sont des collections ordonnées de n'importe quel objet, indexées par des entiers. Les indices d'un tableau commencent à 0. Un indice négatif est considéré comme relatif à la fin du tableau. Par exemple, un indice de -1 désigne le dernier élément du tableau, -2 l'avant-dernier, et ainsi de suite.

Crée des tableaux

Les tableaux sont normalement créés avec la notation []. Ils peuvent contenir n'importe quel type d'objet.

array = [1, "two", 3.0]

Accès aux éléments

Les éléments d'un tableau peuvent être récupérés par leur indice avec la méthode #[]. Elle renvoie l'élément situé à cet indice, ou un sous-tableau qui commence à l'indice de départ et continue sur une longueur donnée. Les indices négatifs se comptent à rebours depuis la fin du tableau.

a = [ "a", "b", "c", "d", "e" ]

a[2]       #=> "c"
a[6]       #=> nil
a[1, 3]    #=> [ "b", "c", "d" ]

a[-1]      #=> "e"
a[-2]      #=> "d"
a[-3, 2]   #=> ["c", "d"]

Méthodes utilitaires

Il existe de nombreuses méthodes utilitaires bien pratiques sur les tableaux. Voici quelques-unes des plus courantes :

fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]

fibonacci.size      #=> 8
fibonacci.sum       #=> 33
fibonacci.reverse   #=> [13, 8, 5, 3, 2, 1, 1, 0]

L'énumération

Plutôt que d'utiliser des boucles pour parcourir les collections, en Ruby, on utilise l'énumération.

L'énumération consiste à parcourir une collection (ici un tableau) et à effectuer une action sur chaque objet. C'est un concept clé en Ruby, qui sert notamment à trier, regrouper, transformer, réduire, et bien d'autres choses encore.

Une énumération qui affiche chaque mot d'un tableau ressemblerait à ceci :

words = ["the", "cat", "sat"]
words.each do |word|
  puts word
end

# Output:
# the
# cat
# sat

Dans cet exemple, on a appelé la méthode .each sur notre tableau et on lui a passé un bloc qui prend un paramètre (word) et l'affiche.

On étudiera les blocs bien plus en détail plus loin dans le parcours, mais pour l'instant, vois-les comme des fonctions anonymes qui peuvent prendre zéro argument ou plus. Ils peuvent être définis avec la syntaxe do...end (ci-dessus) ou la syntaxe {} (ci-dessous).

Voici d'autres exemples de méthodes de tableau qui utilisent des blocs :

fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]

fibonacci.count  { |number| number == 1 }   #=> 2
fibonacci.any?   { |number| number == 6 }   #=> false
fibonacci.select { |number| number.odd? }   #=> [1, 1, 3, 5, 13]
fibonacci.all?   { |number| number < 20 }   #=> true
fibonacci.map    { |number| number * 2  }   #=> [0, 2, 2, 4, 6, 10, 16, 26]

Instructions

Tu es un passionné d'observation des oiseaux qui note combien d'oiseaux ont visité ton jardin au cours des sept derniers jours.

Tu as cinq tâches, qui portent toutes sur le nombre d'oiseaux ayant visité ton jardin.

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

Pour pouvoir comparer, tu gardes toujours à portée de main une copie des comptages de la semaine dernière, qui étaient : 0, 2, 5, 3, 7, 8 et 4. Implémente la méthode BirdCount.last_week qui renvoie les comptages de la semaine dernière :

BirdCount.last_week
# => [0, 2, 5, 3, 7, 8, 4]

2. Vérifie combien d'oiseaux ont visité ton jardin hier

Implémente la méthode BirdCount#yesterday pour renvoyer combien d'oiseaux ont visité ton jardin hier. Les comptages sont classés par jour, le premier élément étant le comptage du jour le plus ancien et le dernier, celui d'aujourd'hui.

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.yesterday
# => 4

3. Calcule le nombre total d'oiseaux visiteurs

Implémente la méthode BirdCount#total pour renvoyer le nombre total d'oiseaux qui ont visité ton jardin :

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.total
# => 19

4. Calcule le nombre de jours chargés

Certains jours sont plus chargés que d'autres. Un jour chargé est un jour où cinq oiseaux ou plus ont visité ton jardin. Implémente la méthode BirdCount#busy_days pour renvoyer le nombre de jours chargés :

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.busy_days
# => 2

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

Implémente la méthode BirdCount#day_without_birds? qui renvoie true s'il y a eu un jour où aucun oiseau n'a visité le jardin ; sinon, renvoie false :

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.day_without_birds?
# => true
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Ruby Exercism

Prêt à commencer Comptage d'oiseaux ?

Inscris-toi sur Exercism pour apprendre et maîtriser Ruby avec 21 concepts121 exercices, et un vrai mentorat humain, le tout gratuitement.