Rutas
/
Ruby
Ruby
/
Ejercicios
/
Recuento de aves
Recuento de aves

Recuento 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 como relativo al 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.

Crear arrays

Normalmente, los arrays se crean 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 recuperar por su índice con el método #[]. Esto devuelve el elemento en el índice indicado, 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 consiste en recorrer una colección (en este caso, un array) y realizar alguna acción sobre 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 sería así:

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

# Output:
# the
# cat
# sat

En este ejemplo, hemos llamado al método .each en nuestro array y le hemos pasado 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 aficionado a la observación de aves que lleva la cuenta de cuántos pájaros han visitado tu jardín en los últimos siete días.

Tienes cinco tareas, todas relacionadas con el número de pájaros que han visitado tu jardín.

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

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

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

2. Comprueba cuántos pájaros te visitaron ayer

Implementa el método BirdCount#yesterday para que devuelva cuántos pájaros visitaron tu jardín ayer. Los recuentos de pájaros están ordenados por días, donde el primer elemento es el recuento del día más antiguo y el último elemento es el recuento 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 pájaros que han visitado el jardín

Implementa el método BirdCount#total para que devuelva el número total de pájaros 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 ajetreados

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

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 algún día sin pájaros visitantes

Implementa el método BirdCount#day_without_birds?, que devuelve true si hubo algún día en el que ningún pájaro visitó el jardín; en caso 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 pestaña nueva
Ruby Exercism

¿Listo para empezar Recuento de aves?

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