Trilhas
/
Ruby
Ruby
/
Exercícios
/
Contagem de pássaros
Contagem de pássaros

Contagem de pássaros

Exercício de aprendizagem

Introdução

Arrays

Em Ruby, arrays (ou vetores) são coleções ordenadas de qualquer objeto, indexadas por números inteiros. A indexação de arrays começa em 0. Um índice negativo é considerado relativo ao fim do array, por exemplo: um índice -1 indica o último elemento do array, -2 é o penúltimo elemento, e assim por diante.

Criando arrays

Normalmente, os arrays são criados usando a notação []. Eles podem conter objetos de tipos diferentes.

array = [1, "two", 3.0]

Referência a elementos

Os elementos de um array podem ser recuperados por seus índices usando o método #[]. Isso retorna o elemento no índice, ou retorna um subarray começando no índice inicial e continuando por um comprimento especificado. Índices negativos contam de trás para frente a partir do fim do 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

Há vários métodos auxiliares úteis em arrays. Aqui estão alguns dos mais comuns:

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]

Enumeração

Em vez de usar laços para iterar sobre coleções, em Ruby usamos enumeração.

A enumeração é o ato de percorrer uma coleção (neste caso, um array) e executar alguma ação em cada objeto. A enumeração é um conceito-chave em Ruby e é usada para coisas como ordenação, agrupamento, mapeamento, redução e muito mais.

Uma enumeração para imprimir cada palavra de um array seria assim:

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

# Output:
# the
# cat
# sat

Neste exemplo, chamamos o método .each no nosso array e passamos um bloco que recebe um parâmetro (word) e o imprime.

Vamos ver blocos com muito mais profundidade mais adiante na trilha, mas por enquanto pense neles como funções anônimas que podem receber zero ou mais argumentos. Eles podem ser definidos usando a sintaxe do...end (acima), ou a sintaxe {} (abaixo).

Aqui estão alguns outros exemplos de métodos de array que usam blocos:

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]

Instruções

Você adora observar aves e acompanha quantos pássaros visitaram seu jardim nos últimos sete dias.

Você tem cinco tarefas, todas sobre os números de pássaros que visitaram seu jardim.

1. Confira quais foram as contagens da semana passada

Para fins de comparação, você sempre mantém por perto uma cópia das contagens da semana passada, que foram: 0, 2, 5, 3, 7, 8 e 4. Implemente o método BirdCount.last_week, que retorna as contagens da semana passada:

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

2. Verifique quantos pássaros visitaram ontem

Implemente o método BirdCount#yesterday para retornar quantos pássaros visitaram seu jardim ontem. As contagens de pássaros estão ordenadas por dia: o primeiro elemento é a contagem do dia mais antigo e o último é a contagem de hoje.

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

3. Calcule o número total de pássaros visitantes

Implemente o método BirdCount#total para retornar o número total de pássaros que visitaram seu jardim:

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

4. Calcule o número de dias movimentados

Alguns dias são mais movimentados que outros. Um dia movimentado é aquele em que cinco ou mais pássaros visitaram seu jardim. Implemente o método BirdCount#busy_days para retornar o número de dias movimentados:

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

5. Verifique se houve um dia sem pássaros visitantes

Implemente o método BirdCount#day_without_birds?, que retorna true se houve um dia em que nenhum pássaro visitou o jardim; caso contrário, retorne false:

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.day_without_birds?
# => true
Editar via GitHub O link abre em uma nova janela ou aba
Ruby Exercism

Tudo pronto para começar Contagem de pássaros?

Crie sua conta no Exercism para aprender e dominar Ruby com 21 conceitos121 exercícios e mentoria humana de verdade, tudo de graça.