Треки
/
Elixir
Elixir
/
Вправи
/
Підрахунок птахів
Підрахунок птахів

Підрахунок птахів

Навчальна вправа

Вступ

Рекурсія

Рекурсивні функції - це функції, які викликають самі себе.

Рекурсивна функція повинна мати принаймні один базовий випадок і принаймні один рекурсивний випадок.

Базовий випадок повертає значення, не викликаючи функцію знову. Рекурсивний випадок викликає функцію знову, змінюючи вхідні дані так, щоб вони рано чи пізно збіглися з базовим випадком.

Дуже часто кожен випадок записують як окремий варіант функції.

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

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

Вказівки

Ми завзяті спостерігачі птахів і ретельно записуємо, скільки птахів завітало до нашого саду за день.

Ми вирішили вивести своє спостереження за птахами на новий рівень і створити кілька інструментів, які допоможуть нам відстежувати й обробляти дані.

Ми обрали зберігати дані як масив цілих чисел. Перше число в масиві - це кількість птахів, які завітали до нашого саду сьогодні, друге - вчора, і так далі.

1. Перевірте, скільки птахів завітало сьогодні

Реалізуйте функцію BirdCount.today/1. Вона повинна приймати масив із кількістю птахів за кожен день і повертати сьогоднішню кількість. Якщо масив порожній, вона повинна повернути nil.

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

2. Збільште сьогоднішню кількість

Реалізуйте функцію BirdCount.increment_day_count/1. Вона повинна приймати масив із кількістю птахів за кожен день і збільшувати сьогоднішню кількість на 1. Якщо масив порожній, поверніть [1].

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

3. Перевірте, чи був день без птахів

Реалізуйте функцію BirdCount.has_day_without_birds?/1. Вона повинна приймати масив із кількістю птахів за кожен день. Вона повинна повертати true, якщо був принаймні один день, коли жоден птах не завітав до саду, і false в іншому разі.

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

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

4. Обчисліть загальну кількість птахів, які завітали

Реалізуйте функцію BirdCount.total/1. Вона повинна приймати масив із кількістю птахів за кожен день і повертати загальну кількість птахів, які завітали до нашого саду відтоді, як ми почали збирати дані.

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

5. Обчисліть кількість насичених днів

Деякі дні насиченіші за інші. Насиченим вважається день, коли до нашого саду завітало пʼять або більше птахів.

Реалізуйте функцію BirdCount.busy_days/1. Вона повинна приймати масив із кількістю птахів за кожен день і повертати кількість насичених днів.

BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Elixir Exercism

Час розпочати Підрахунок птахів?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Elixir, а також 58 концепцій168 вправ та справжнє наставництво від людей, і все це безкоштовно.