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

Contagem de pássaros

Exercício de aprendizagem

Introdução

Recursão

Funções recursivas são funções que chamam a si mesmas.

Uma função recursiva precisa ter pelo menos um caso base e pelo menos um caso recursivo.

Um caso base retorna um valor sem chamar a função de novo. Um caso recursivo chama a função de novo, modificando a entrada para que em algum momento ela corresponda ao caso base.

Muitas vezes, cada caso é escrito em sua própria cláusula de função.

# base case
def count([]), do: 0

# recursive case
def count([_head | tail]), do: 1 + count(tail)

Instruções

Você adora observar aves e acompanha quantas aves visitaram seu jardim em cada dia.

Você decidiu levar sua observação de aves a um novo nível e implementar algumas ferramentas que vão te ajudar a acompanhar e processar os dados.

Você escolheu armazenar os dados como uma lista de inteiros. O primeiro número da lista é a quantidade de aves que visitaram seu jardim hoje, o segundo, ontem, e assim por diante.

1. Verifique quantas aves visitaram hoje

Implemente a função BirdCount.today/1. Ela deve receber uma lista com a contagem diária de aves e retornar a contagem de hoje. Se a lista estiver vazia, ela deve retornar nil.

BirdCount.today([2, 5, 1])
# => 2

2. Incremente a contagem de hoje

Implemente a função BirdCount.increment_day_count/1. Ela deve receber uma lista com a contagem diária de aves e incrementar a contagem de hoje em 1. Se a lista estiver vazia, retorne [1].

BirdCount.increment_day_count([4, 0, 2])
# => [5, 0, 2]

3. Verifique se houve um dia sem aves visitantes

Implemente a função BirdCount.has_day_without_birds?/1. Ela deve receber uma lista com a contagem diária de aves. Ela deve retornar true se houve pelo menos um dia em que nenhuma ave visitou o jardim, e false caso contrário.

BirdCount.has_day_without_birds?([2, 0, 4])
# => true

BirdCount.has_day_without_birds?([3, 8, 1, 5])
# => false

4. Calcule o número total de aves visitantes

Implemente a função BirdCount.total/1. Ela deve receber uma lista com a contagem diária de aves e retornar o número total que visitou seu jardim desde que você começou a coletar os dados.

BirdCount.total([4, 0, 9, 0, 5])
# => 18

5. Calcule o número de dias movimentados

Alguns dias são mais movimentados que outros. Um dia movimentado é aquele em que cinco ou mais aves visitaram seu jardim.

Implemente a função BirdCount.busy_days/1. Ela deve receber uma lista com a contagem diária de aves e retornar o número de dias movimentados.

BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
Editar via GitHub O link abre em uma nova janela ou aba
Elixir Exercism

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

Crie sua conta no Exercism para aprender e dominar Elixir com 58 conceitos168 exercícios e mentoria humana de verdade, tudo de graça.