exercism/elixir/bird-count/README.md

93 lines
2.8 KiB
Markdown
Raw Permalink Normal View History

2023-12-18 05:39:17 +00:00
# Bird Count
Welcome to Bird Count on Exercism's Elixir Track.
If you need help running the tests or submitting your code, check out `HELP.md`.
If you get stuck on the exercise, check out `HINTS.md`, but try and solve it without using those first :)
## Introduction
## Recursion
Recursive functions are functions that call themselves.
A recursive function needs to have at least one _base case_ and at least one _recursive case_.
A _base case_ returns a value without calling the function again. A _recursive case_ calls the function again, modifying the input so that it will at some point match the base case.
Very often, each case is written in its own function clause.
```elixir
# base case
def count([]), do: 0
# recursive case
def count([_head | tail]), do: 1 + count(tail)
```
## Instructions
You're an avid bird watcher that keeps track of how many birds have visited your garden on any given day.
You decided to bring your bird watching to a new level and implement a few tools that will help you track and process the data.
You have chosen to store the data as a list of integers. The first number in the list is the number of birds that visited your garden today, the second yesterday, and so on.
## 1. Check how many birds visited today
Implement the `BirdCount.today/1` function. It should take a list of daily bird counts and return today's count. If the list is empty, it should return `nil`.
```elixir
BirdCount.today([2, 5, 1])
# => 2
```
## 2. Increment today's count
Implement the `BirdCount.increment_day_count/1` function. It should take a list of daily bird counts and increment the today's count by 1. If the list is empty, return `[1]`.
```elixir
BirdCount.increment_day_count([4, 0, 2])
# => [5, 0, 2]
```
## 3. Check if there was a day with no visiting birds
Implement the `BirdCount.has_day_without_birds?/1` function. It should take a list of daily bird counts. It should return `true` if there was at least one day when no birds visited the garden, and `false` otherwise.
```elixir
BirdCount.has_day_without_birds?([2, 0, 4])
# => true
BirdCount.has_day_without_birds?([3, 8, 1, 5])
# => false
```
## 4. Calculate the total number of visiting birds
Implement the `BirdCount.total/1` function. It should take a list of daily bird counts and return the total number that visited your garden since you started collecting the data.
```elixir
BirdCount.total([4, 0, 9, 0, 5])
# => 18
```
## 5. Calculate the number of busy days
Some days are busier than others. A busy day is one where five or more birds have visited your garden.
Implement the `BirdCount.busy_days/1` function. It should take a list of daily bird counts and return the number of busy days.
```elixir
BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
```
## Source
### Created by
- @angelikatyborska
### Contributed to by
- @neenjaw