Треки
/
Elixir
Elixir
/
Вправи
/
Винний погріб
Винний погріб

Винний погріб

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

Вступ

Масиви ключових слів

Масиви ключових слів - це структура даних ключ-значення.

[month: "April", year: 2018]

Масиви ключових слів - це масиви кортежів {key, value}; їх можна записати і в такому вигляді, але коротший синтаксис уживають частіше.

[month: "April"] == [{:month, "April"}]
# => true

Ключі в масиві ключових слів мають бути атомами, а значеннями може бути будь-що. Кожен ключ можна використати більше ніж один раз. Пари ключ-значення в масиві ключових слів упорядковані.

З масивами ключових слів можна працювати так само, як і з масивами, або скористатися модулем Keyword.

Вказівки

Ми керуємо розкішним рестораном із чималим винним погребом. Серед наших відвідувачів багато вимогливих поціновувачів вина. Знайти потрібну пляшку вина для конкретного відвідувача - нелегке завдання.

Як власники ресторану, обізнані з технологіями, ми вирішили пришвидшити процес вибору вина, написавши застосунок, який дозволить гостям фільтрувати наші вина за їхніми вподобаннями.

1. Поясніть кольори вина

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

Реалізуйте функцію WineCellar.explain_colors/0. Вона не приймає аргументів і повертає ключовий список, у якому ключами є кольори вина, а значеннями - пояснення.

Колір Пояснення
:white Fermented without skin contact.
:red Fermented with skin contact using dark-colored grapes.
:rose Fermented with some skin contact, but not enough to qualify as a red wine.

2. Отримайте всі вина заданого кольору

Пляшка вина представлена кортежем із трьох елементів: сорту винограду, року та країни походження. Вина зберігаються за кольором у ключовому списку.

[
  white: {"Chardonnay", 2015, "Italy"},
  white: {"Pinot grigio", 2017, "Germany"},
  red: {"Pinot noir", 2016, "France"},
  rose: {"Dornfelder", 2018, "Germany"}
]

Реалізуйте функцію WineCellar.filter/3. Вона повинна приймати ключовий список вин, атом кольору та ключовий список опцій з типовим значенням []. Функція повинна повертати список вин заданого кольору.

WineCellar.filter(
  [
    white: {"Chardonnay", 2015, "Italy"},
    white: {"Pinot grigio", 2017, "Germany"},
    red: {"Pinot noir", 2016, "France"},
    rose: {"Dornfelder", 2018, "Germany"}
  ],
  :white
)

# => [
#      {"Chardonnay", 2015, "Italy"},
#      {"Pinot grigio", 2017, "Germany"}
#    ]

3. Отримайте всі вина заданого кольору, розлиті в заданому році

Розширте функцію WineCellar.filter/3. Якщо передано опцію :year, функція повинна повертати список вин заданого кольору із заданого року.

Скористайтеся вже реалізованою функцією WineCellar.filter_by_year/2. Вона приймає список вин і рік як аргументи та повертає список вин із заданого року.

WineCellar.filter(
  [
    white: {"Chardonnay", 2015, "Italy"},
    white: {"Pinot grigio", 2017, "Germany"},
    red: {"Pinot noir", 2016, "France"},
    rose: {"Dornfelder", 2018, "Germany"}
  ],
  :white,
  year: 2015
)

# => [
#      {"Chardonnay", 2015, "Italy"}
#    ]

4. Отримайте всі вина заданого кольору, розлиті в заданій країні

Розширте функцію WineCellar.filter/3. Якщо передано опцію :country, функція повинна повертати список вин заданого кольору із заданої країни.

Скористайтеся вже реалізованою функцією WineCellar.filter_by_country/2. Вона приймає список вин і країну як аргументи та повертає список вин із заданої країни.

Переконайтеся, що функція працює, коли їй передано і опцію :year, і опцію :country, у будь-якому порядку.

WineCellar.filter(
  [
    white: {"Chardonnay", 2015, "Italy"},
    white: {"Pinot grigio", 2017, "Germany"},
    red: {"Pinot noir", 2016, "France"},
    rose: {"Dornfelder", 2018, "Germany"}
  ],
  :white,
  year: 2015,
  country: "Germany"
)

# => []
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Elixir Exercism

Час розпочати Винний погріб?

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