Percursos
/
Elixir
Elixir
/
Exercícios
/
Contagem de aves
Contagem de aves

Contagem de aves

Exercício de aprendizagem

Introdução

Recursividade

Uma função recursiva é uma função que se chama a si própria.

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

Um caso base devolve um valor sem voltar a chamar a função. Um caso recursivo chama a função outra vez, modificando o valor de entrada para que em algum momento corresponda ao caso base.

Muitas vezes, cada caso é escrito na 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

És um observador de aves entusiasta que acompanha quantas aves visitaram o teu jardim em cada dia.

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

Escolheste guardar os dados numa lista de números inteiros. O primeiro número da lista é o número de aves que visitaram o teu jardim hoje, o segundo ontem, e assim por diante.

1. Verifica quantas aves visitaram hoje

Implementa a função BirdCount.today/1. Deve receber uma lista de contagens diárias de aves e devolver a contagem de hoje. Se a lista estiver vazia, deve devolver nil.

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

2. Incrementa a contagem de hoje

Implementa a função BirdCount.increment_day_count/1. Deve receber uma lista de contagens diárias de aves e incrementar a contagem de hoje em 1. Se a lista estiver vazia, devolve [1].

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

3. Verifica se houve um dia sem aves visitantes

Implementa a função BirdCount.has_day_without_birds?/1. Deve receber uma lista de contagens diárias de aves. Deve devolver 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. Calcula o número total de aves visitantes

Implementa a função BirdCount.total/1. Deve receber uma lista de contagens diárias de aves e devolver o número total que visitou o teu jardim desde que começaste a recolher os dados.

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

5. Calcula o número de dias movimentados

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

Implementa a função BirdCount.busy_days/1. Deve receber uma lista de contagens diárias de aves e devolver o número de dias movimentados.

BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
Editar via GitHub A ligação abre numa nova janela ou separador
Elixir Exercism

Estás pronto para começar Contagem de aves?

Inscreve-te no Exercism para aprenderes e dominares Elixir com 58 conceitos168 exercícios, e mentoria humana real, tudo grátis.