Кошик для покупок


Історія

Нам потрібно змоделювати кошик для покупок для крамниці на розі. Кошик має відстежувати список доданих товарів і правильно обчислювати ціну.

Товари додаються до кошика за допомогою кодів SKU (stock-keeping unit, одиниця зберігання запасу). Товари в крамниці:

Назва Ціна SKU
Картопля 10.00 STAPOT
Рис 30.00 STARIC
Кава 14.99 STACOF
Газета 2.99 MEDNEW

Завдання

Кошик для покупок повинен підтримувати такі операції:

  • Додати товари до кошика: зчитує SKU і додає його до кошика.
  • Перевірити загальну суму: загальна вартість товарів у кошику як число з двома знаками після коми (наприклад, 3.99).
  • Перевірити товари в кошику: список назв товарів у кошику, упорядкований за алфавітом, без повторів, розділених комою та пробілом.

Термінологія

  • Товар: позиція, яку можна додати до кошика для покупок.
  • SKU: ідентифікатор, який складається з перших трьох великих літер типу товару + перших трьох великих літер назви товару.
  • Ціна: вартість товару як число з двома знаками після коми.

Реалізації

Альтернативна версія

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

Історія

Щоб покупці залишалися задоволеними, крамниця на розі додала знижкові купони. Це означає, що для підтримки цих знижок наш кошик для покупок повинен уміти зчитувати знижкові купони та застосовувати їх до поточних товарів. Підтримувані купони:

Тип SKU Правило
Фіксована знижка FIX_TEN Знижує загальну суму кошика на 10.00
Знижка на товар HALF_STAPOT Зменшує ціну всіх товарів STAPOT удвічі

Завдання

Кошик для покупок має отримати нову операцію scan coupon, яка приймає SKU і додає його до кошика. Памʼятаймо, що total_amount не може бути відʼємним числом: мінімальне значення total_amount дорівнює 0.

Термінологія

  • Купон: знижка, яку можна застосувати до кошика. Купони унікальні, і кожен можна застосувати лише один раз. Якщо купон має тип фіксованої знижки, друга частина SKU містить суму знижки, записану великими літерами.

Реалізації