Треки
/
Clojure
Clojure
/
Вправи
/
Спостерігач за птахами
Спостерігач за птахами

Спостерігач за птахами

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

Вступ

vector у Clojure - це послідовна, індексована та незмінна колекція з нуля або більше значень. Це означає, що після створення вектора його вже не можна змінити. Функції, які працюють із векторами, повертають новий вектор, а початковий вектор залишається незмінним. Значення у векторі можуть бути різнорідних типів. Вектори можна визначати так:

(def empty [])
(def single-value [5])
(def single-value-alternative (vector 5))
(def three-values [1 "a" "b"])

Елементи вектора можна отримати за індексом. Вектори в Clojure мають нульову індексацію, тобто індекс першого елемента завжди дорівнює нулю:

(def numbers [2 3 5])
;; Read value from vector
(get numbers 2)
;;=> 5
;; Update value in vector
(assoc numbers 2 9)
;;=> [2 3 9]

Початковий вектор залишається незмінним:

numbers
;;=> [2 3 5]

Щоб запамʼятати оновлене значення, потрібно передати його далі або зберегти у var:

(def updated-numbers
  (assoc numbers 2 9))
(get updated-numbers 2)
;;=> 9

Вказівки

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

У нас шість завдань, і всі вони стосуються кількості птахів, що відвідали наш сад.

1. Перевірте, якими були підрахунки минулого тижня

Для порівняння ми завжди тримаємо напохваті копію підрахунків за минулий тиждень, а саме: 0, 2, 5, 3, 7, 8 і 4. Створіть вектор із підрахунками минулого тижня:

last-week
;;=> [0 2 5 3 7 8 4]

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

Реалізуйте функцію today, щоб вона повертала кількість птахів, які відвідали наш сад сьогодні. Підрахунки птахів упорядковано за днями: перший елемент показує кількість за найдавніший день, а останній - за сьогодні.

(def birds-per-day [2 5 0 7 4 1])
(today birds-per-day)
;;=> 1

3. Збільште сьогоднішній підрахунок на одиницю

Реалізуйте функцію inc-bird, щоб збільшити сьогоднішній підрахунок на одиницю:

(inc-bird birds-per-day)
;;=> [2 5 0 7 4 2]

4. Перевірте, чи був день, коли не прилітав жоден птах

Реалізуйте функцію-предикат day-without-birds?, яка повертає true, якщо був день, коли до саду не прилетів жоден птах; інакше повертається false:

(day-without-birds? birds-per-day)
;;=> true

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

Реалізуйте функцію n-days-count, яка повертає кількість птахів, що відвідали наш сад від початку тижня, обмежену вказаною кількістю днів від початку тижня.

(n-days-count birds-per-day 4)
;;=> 14

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

Деякі дні бувають насиченішими за інші. Насичений день - це день, коли до нашого саду прилетіло пʼять або більше птахів. Реалізуйте функцію busy-days, щоб вона повертала кількість насичених днів:

(busy-days birds-per-day)
;;=> 2

7. Перевірте, чи тиждень непарний

За останній рік ми помітили, що деякі тижні мають ту саму непарну закономірність, коли кількість птахів чергується між одиницею та нулем. Реалізуйте функцію odd-week?, яка повертає true, якщо закономірність підрахунку птахів цього тижня збігається з непарною закономірністю:

(odd-week? [1 0 1 0 1 0 1])
;;=> true
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Clojure Exercism

Час розпочати Спостерігач за птахами?

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