Треки
/
Lean
Lean
/
Вправи
/
Книгарня
Книгарня

Книгарня

Середня

Вказівки

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

Один примірник будь-якої з пʼяти книг коштує $8.

Якщо ж ми купуємо дві різні книги, знижка на ці дві книги становить 5%.

Якщо ми купуємо 3 різні книги, знижка становить 10%.

Якщо ми купуємо 4 різні книги, знижка становить 20%.

Якщо ми купуємо всі 5, знижка становить 25%.

Зауважмо, що якщо ми купуємо чотири книги, з яких 3 різні за назвою, знижка 10% діє на ті 3, що утворюють набір, але четверта книга все одно коштує $8.

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

Наприклад, скільки коштує такий кошик книг?

  • 2 примірники першої книги
  • 2 примірники другої книги
  • 2 примірники третьої книги
  • 1 примірник четвертої книги
  • 1 примірник пʼятої книги

Ці 8 книг можна згрупувати, наприклад, так:

  • 1 група з 5 книг (1-ша, 2-га, 3-тя, 4-та, 5-та)
  • 1 група з 3 книг (1-ша, 2-га, 3-тя)

Це дало б такий підсумок:

  • 5 книг зі знижкою 25%
  • 3 книги зі знижкою 10%

Що дає:

  • 5 × (100% - 25%) × $8 = 5 × $6.00 = $30.00, плюс
  • 3 × (100% - 10%) × $8 = 3 × $7.20 = $21.60

Що дорівнює $51.60.

Однак ці самі 8 книг можна згрупувати й інакше:

  • 1 група з 4 книг (1-ша, 2-га, 3-тя, 4-та)
  • 1 група з 4 книг (1-ша, 2-га, 3-тя, 5-та)

Це дало б такий підсумок:

  • 4 книги зі знижкою 20%
  • 4 книги зі знижкою 20%

Що дає:

  • 4 × (100% - 20%) × $8 = 4 × $6.40 = $25.60, плюс
  • 4 × (100% - 20%) × $8 = 4 × $6.40 = $25.60

Що дорівнює $51.20.

І $51.20 - це ціна з найбільшою знижкою.

Підтипи

У цій вправі визначено підтип Book для натуральних чисел від 1 до 5. Підтип можна уявити як пару ⟨x, h⟩, де x - значення, а h - доведення його коректності.

Значення всередині підтипу (у цьому випадку x) можна отримати через .val, наприклад x.val. Його доведення можна отримати через .property, наприклад x.property. До обох також можна дістатися за допомогою зіставлення зі зразком, як завжди.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Lean Exercism

Час розпочати Книгарня?

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