Tracks
/
Ruby
Ruby
/
Ejercicios
/
Conteo de aves
Conteo de aves

Conteo de aves

Ejercicio de aprendizaje

Introducción

Arrays

En Ruby, los arrays son colecciones ordenadas de cualquier objeto, indexadas por números enteros. La indexación de los arrays empieza en 0. Un índice negativo se interpreta en relación con el final del array. Por ejemplo, un índice de -1 indica el último elemento del array, -2 es el penúltimo elemento del array, y así sucesivamente.

Creación de arrays

Los arrays se crean normalmente con la notación []. Pueden contener objetos de cualquier tipo.

array = [1, "two", 3.0]

Referencia a elementos

Los elementos de un array se pueden obtener por su índice con el método #[]. Esto devuelve el elemento que está en ese índice, o devuelve un subarray que empieza en el índice inicial y continúa durante una longitud determinada. Los índices negativos cuentan hacia atrás desde el final del 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"]

Métodos auxiliares

Hay muchos métodos auxiliares útiles en los arrays. Aquí tienes algunos de los más comunes:

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]

Enumeración

En lugar de usar bucles para recorrer colecciones, en Ruby usamos la enumeración.

La enumeración es el acto de recorrer una colección (en este caso, un array) y realizar alguna acción con cada objeto. La enumeración es un concepto clave en Ruby y se usa para cosas como ordenar, agrupar, mapear, reducir y mucho más.

Una enumeración para imprimir cada palabra de un array se vería así:

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

# Output:
# the
# cat
# sat

En este ejemplo, llamamos al método .each en nuestro array y le pasamos un bloque que recibe un parámetro (word) y lo imprime.

Veremos los bloques con mucho más detalle más adelante en el Track, pero por ahora piensa en ellos como funciones anónimas que pueden recibir cero o más argumentos. Se pueden definir con la sintaxis do...end (arriba) o con la sintaxis {} (abajo).

Aquí tienes otros ejemplos de métodos de array que usan bloques:

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]

Instrucciones

Eres un observador de aves entusiasta que lleva la cuenta de cuántas aves han visitado tu jardín en los últimos siete días.

Tienes cinco tareas, todas relacionadas con la cantidad de aves que visitaron tu jardín.

1. Comprueba cuáles fueron los conteos de la semana pasada

Para poder comparar, siempre tienes cerca una copia de los conteos de la semana pasada, que fueron: 0, 2, 5, 3, 7, 8 y 4. Implementa el método BirdCount.last_week que devuelve los conteos de la semana pasada:

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

2. Comprueba cuántas aves visitaron ayer

Implementa el método BirdCount#yesterday para que devuelva cuántas aves visitaron tu jardín ayer. Los conteos de aves están ordenados por día: el primer elemento es el conteo del día más antiguo y el último es el conteo de hoy.

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

3. Calcula el número total de aves visitantes

Implementa el método BirdCount#total para que devuelva el número total de aves que han visitado tu jardín:

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

4. Calcula el número de días ocupados

Algunos días son más ocupados que otros. Un día ocupado es aquel en el que cinco aves o más han visitado tu jardín. Implementa el método BirdCount#busy_days para que devuelva el número de días ocupados:

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

5. Comprueba si hubo un día sin aves visitantes

Implementa el método BirdCount#day_without_birds? que devuelve true si hubo un día en el que cero aves visitaron el jardín; de lo contrario, devuelve false:

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.day_without_birds?
# => true
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Ruby Exercism

¿Todo listo para empezar Conteo de aves?

Regístrate en Exercism para aprender y dominar Ruby con 21 conceptos121 ejercicios y mentoría humana real, todo gratis.