Треки
/
JavaScript
JavaScript
/
Вправи
/
Змішані соки
Змішані соки

Змішані соки

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

Вступ

Цикли while

За допомогою циклу while можна повторно виконувати код, доки виконується певна умова. Він записується за допомогою ключового слова while, після якого йде умова в круглих дужках (()) і блок коду з тілом циклу у фігурних дужках ({}).

while (condition) {
  // code that is executed repeatedly as long as the condition is true
}

У JavaScript також є цикл do-while. Тут умова перевіряється після виконання тіла циклу. Це корисно, коли умова залежить від обчислень, виконаних у тілі.

do {
  // The code here will always be executed once and then
  // repeatedly while the condition is true.
} while (condition);

Усередині тіла циклу можна використати ключове слово break, щоб повністю зупинити виконання циклу. На противагу цьому, ключове слово continue зупиняє виконання лише поточної ітерації та переходить до наступної. За допомогою continue часто вдається уникнути обгортання великих частин тіла циклу в умовну конструкцію.

let i = 0;

while (i < 100) {
  i = i + 2;

  if (i % 3 === 0) {
    continue;
  }

  // The code here will only be executed when i was not divisible
  // by 3 in the check above.
}

Конструкція switch

Крім умовної конструкції, у JavaScript також є конструкція switch для умовного виконання логіки. Її використовують, коли одну змінну потрібно порівняти з кількома варіантами. Порівняння виконується перевіркою на сувору рівність (===), див. концепція порівняння. Для деякої змінної x конструкція switch у JavaScript має такий синтаксис.

switch (x) {
  case option1:
    // code that is executed when "x === option1" is true
    break;
  case option2:
    // code that is executed when "x === option2" is true
    break;
  default:
    // code that is executed when x does not equal any of the options
}

Варіант default необовʼязковий. Його використовують, коли потрібно виконати код, якщо жоден з інших варіантів не збігається зі змінною.

Наведені вище інструкції break потрібні, тому що за замовчуванням у JavaScript усі варіанти «провалюються». Це означає, що без інструкції break виконався б увесь код у варіантах після першого збігу, навіть якщо x не збігається з ними. Така поведінка «провалювання за замовчуванням» є поширеною пасткою під час використання switch у JavaScript. Усередині функції замість break можна також використати return, щоб уникнути цієї проблеми.

Вказівки

Наша подруга Лі Мей тримає соковий бар, де продає смачні змішані фруктові соки. Ми часто буваємо в її крамниці й розуміємо, що могли б полегшити життя подрузі. Ми вирішуємо скористатися своїми навичками програмування, щоб допомогти Лі Мей з її роботою.

1. Визначте, скільки часу потрібно, щоб змішати сік

Лі Мей любить заздалегідь повідомляти клієнтам, скільки їм доведеться чекати на сік із меню, який вони замовили. Їй важко запамʼятати точні числа, бо час змішування соків різний. 'Pure Strawberry Joy' змішується 0,5 хвилини, 'Energizer' і 'Green Garden' потребують по 1,5 хвилини, 'Tropical Island' потребує 3 хвилини, а 'All or Nothing' потребує 5 хвилин. Для всіх інших напоїв (наприклад, спеціальних пропозицій) можна припустити, що час приготування становить 2,5 хвилини.

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

timeToMixJuice('Tropical Island');
// => 3

timeToMixJuice('Berries & Lime');
// => 2.5

2. Поповніть запас скибочок лайма

Багато з напоїв Лі Мей містять скибочки лайма, або як інгредієнт, або як частину прикраси. Тож коли вона починає ранкову зміну, їй потрібно переконатися, що в контейнері достатньо скибочок лайма на весь день.

Реалізуйте функцію limesToCut, яка приймає кількість скибочок лайма, які Лі Мей має нарізати, і масив, що представляє запас цілих лаймів, які в неї під рукою. З однієї лайми 'small' можна отримати 6 скибочок, з лайми 'medium' можна отримати 8 скибочок, а з лайми 'large' можна отримати 10 скибочок. Вона завжди нарізає лайми в тому порядку, у якому вони стоять у масиві, починаючи з першого елемента. Вона продовжує, доки не досягне потрібної кількості скибочок або доки не закінчаться лайми.

Лі Мей хотіла б заздалегідь знати, скільки лаймів їй потрібно нарізати. Функція limesToCut має повертати кількість лаймів, які потрібно нарізати.

limesToCut(25, ['small', 'small', 'large', 'medium', 'small']);
// => 4

3. Завершіть зміну

Лі Мей завжди працює до 15:00. Потім її зміну приймає працівник Дмитро. Часто трапляється, що на момент закінчення зміни Лі Мей замовлені напої ще не приготовані. Тоді Дмитро готує напої, що залишилися.

Щоб полегшити передачу зміни, реалізуйте функцію remainingOrders, яка приймає кількість хвилин, що залишилися до кінця зміни Лі Мей, і масив соків, які замовили, але ще не приготували. Функція має повертати замовлення, які Лі Мей не може почати готувати до кінця свого робочого дня.

Час, що залишився до кінця зміни, завжди буде більшим за 0. Масив соків для приготування ніколи не буде порожнім. Крім того, замовлення готують у тому порядку, у якому вони стоять у масиві. Якщо Лі Мей починає змішувати певний сік, вона завжди доводить його до кінця, навіть якщо їй доведеться працювати трохи довше. Якщо не залишилося замовлень, які має виконати Дмитро, потрібно повернути порожній масив.

remainingOrders(5, ['Energizer', 'All or Nothing', 'Green Garden']);
// => ['Green Garden']
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
JavaScript Exercism

Час розпочати Змішані соки?

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