Track
/
Ruby
Ruby
/
Esercizi
/
Conteggio degli uccelli
Conteggio degli uccelli

Conteggio degli uccelli

Esercizio di apprendimento

Introduzione

Array

In Ruby, gli array sono collezioni ordinate di qualsiasi oggetto, indicizzate tramite numeri interi. L'indicizzazione degli array parte da 0. Un indice negativo viene considerato relativo alla fine dell'array: ad esempio, un indice di -1 indica l'ultimo elemento dell'array, -2 è il penultimo elemento dell'array e così via.

Creazione di array

Gli array vengono normalmente creati usando la notazione []. Possono contenere oggetti di qualsiasi tipo.

array = [1, "two", 3.0]

Riferimento agli elementi

Gli elementi di un array possono essere recuperati tramite i loro indici usando il metodo #[]. Questo restituisce l'elemento all'indice specificato, oppure restituisce un sottoarray che inizia dall'indice di partenza e continua per una lunghezza specificata. Gli indici negativi vengono contati a ritroso a partire dalla fine dell'array.

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"]

Metodi ausiliari

Ci sono molti metodi ausiliari utili sugli array. Ecco alcuni dei più comuni:

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]

Enumerazione

Invece di usare cicli per scorrere le collezioni, in Ruby usiamo l'enumerazione.

L'enumerazione è l'atto di scorrere una collezione (in questo caso un array) ed eseguire un'azione su ciascun oggetto. L'enumerazione è un concetto chiave in Ruby e viene usata per cose come ordinare, raggruppare, mappare, ridurre e molto altro.

Ecco come apparirebbe un'enumerazione per stampare ogni parola in un array:

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

# Output:
# the
# cat
# sat

In questo esempio, abbiamo chiamato il metodo .each sul nostro array e passato un blocco che accetta un parametro (word) e lo stampa.

Approfondiremo i blocchi molto più avanti nel percorso, ma per ora pensali come funzioni anonime che possono accettare zero o più argomenti. Possono essere definiti usando la sintassi do...end (sopra) o la sintassi {} (sotto).

Ecco alcuni altri esempi di metodi degli array che usano blocchi:

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]

Istruzioni

Sei un appassionato osservatore di uccelli che tiene traccia di quanti uccelli hanno visitato il tuo giardino negli ultimi sette giorni.

Hai cinque attività, che riguardano tutte il numero di uccelli che hanno visitato il tuo giardino.

1. Controlla quali erano i conteggi della settimana scorsa

Per fare confronti, tieni sempre a portata di mano una copia dei conteggi della settimana scorsa, che erano: 0, 2, 5, 3, 7, 8 e 4. Implementa il metodo BirdCount.last_week che restituisce i conteggi della settimana scorsa:

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

2. Controlla quanti uccelli hanno visitato ieri il tuo giardino

Implementa il metodo BirdCount#yesterday perché restituisca quanti uccelli hanno visitato il tuo giardino ieri. I conteggi degli uccelli sono ordinati per giorno: il primo elemento è il conteggio del giorno meno recente, l'ultimo è il conteggio di oggi.

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

3. Calcola il numero totale di uccelli in visita

Implementa il metodo BirdCount#total perché restituisca il numero totale di uccelli che hanno visitato il tuo giardino:

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

4. Calcola il numero di giorni intensi

Alcuni giorni sono più intensi di altri. Un giorno intenso è quello in cui cinque o più uccelli hanno visitato il tuo giardino. Implementa il metodo BirdCount#busy_days perché restituisca il numero di giorni intensi:

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

5. Controlla se c'è stato un giorno senza uccelli in visita

Implementa il metodo BirdCount#day_without_birds? che restituisce true se c'è stato un giorno in cui zero uccelli hanno visitato il giardino; altrimenti restituisce false:

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.day_without_birds?
# => true
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Ruby Exercism

Vuoi iniziare Conteggio degli uccelli?

Iscriviti a Exercism per imparare e padroneggiare Ruby con 21 concetti121 esercizi e il mentoring di persone reali, tutto gratis.