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

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

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

Вступ

Масиви

У Ruby масиви - це впорядковані колекції будь-яких обʼєктів з індексами-цілими числами. Індексація масиву починається з 0. Відʼємний індекс вважається відносним до кінця масиву, наприклад, індекс -1 указує на останній елемент масиву, -2 - на передостанній елемент масиву, і так далі.

Створення масивів

Масиви зазвичай створюють за допомогою запису []. Вони можуть містити обʼєкти різних типів.

array = [1, "two", 3.0]

Доступ до елементів

Елементи масиву можна отримати за їхніми індексами, використовуючи метод #[]. Він повертає елемент за індексом або підмасив, що починається з початкового індексу й триває вказану довжину. Відʼємні індекси відраховуються назад від кінця масиву.

a = [ "a", "b", "c", "d", "e" ]

a[2]       #=> "c"
a[6]       #=> nil
a[1, 3]    #=> [ "b", "c", "d" ]

a[-1]      #=> "e"
a[-2]      #=> "d"
a[-3, 2]   #=> ["c", "d"]

Допоміжні методи

У масивів є багато корисних допоміжних методів. Ось деякі з найпоширеніших:

fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]

fibonacci.size      #=> 8
fibonacci.sum       #=> 33
fibonacci.reverse   #=> [13, 8, 5, 3, 2, 1, 1, 0]

Перебирання

Замість того щоб перебирати колекції циклами, у Ruby ми використовуємо перебирання.

Перебирання - це процес проходження колекцією (у цьому випадку масивом) і виконання певної дії над кожним обʼєктом. Перебирання - ключова концепція в Ruby, і його використовують для таких речей, як сортування, групування, перетворення, згортання та багато іншого.

Перебирання, яке виводить кожне слово з масиву, матиме такий вигляд:

words = ["the", "cat", "sat"]
words.each do |word|
  puts word
end

# Output:
# the
# cat
# sat

У цьому прикладі ми викликали метод .each на нашому масиві й передали блок, який приймає один параметр (word) і виводить його.

Ми детальніше розглянемо блоки пізніше в треку, а поки що сприймаймо їх як анонімні функції, які можуть приймати нуль або більше аргументів. Їх можна визначити за допомогою синтаксису do...end (вище) або синтаксису {} (нижче).

Ось інші приклади методів масиву, які використовують блоки:

fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]

fibonacci.count  { |number| number == 1 }   #=> 2
fibonacci.any?   { |number| number == 6 }   #=> false
fibonacci.select { |number| number.odd? }   #=> [1, 1, 3, 5, 13]
fibonacci.all?   { |number| number < 20 }   #=> true
fibonacci.map    { |number| number * 2  }   #=> [0, 2, 2, 4, 6, 10, 16, 26]

Вказівки

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

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

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

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

BirdCount.last_week
# => [0, 2, 5, 3, 7, 8, 4]

2. Перевірмо, скільки птахів завітало вчора

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

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.yesterday
# => 4

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

Реалізуйте метод BirdCount#total, щоб повернути загальну кількість птахів, які завітали до нашого саду:

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.total
# => 19

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

Деякі дні насиченіші за інші. Насиченим вважається день, коли до нашого саду завітало пʼять або більше птахів. Реалізуйте метод BirdCount#busy_days, щоб повернути кількість насичених днів:

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.busy_days
# => 2

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

Реалізуйте метод BirdCount#day_without_birds?, який повертає true, якщо був день, коли до саду не завітав жоден птах; інакше поверніть false:

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.day_without_birds?
# => true
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Ruby Exercism

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

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