Щоб заохотити до більших продажів різних книг із популярної серії з 5 книг, книгарня вирішила пропонувати знижки на купівлю кількох книг одночасно.
Один примірник будь-якої з пʼяти книг коштує $8.
Якщо ж ми купуємо дві різні книги, знижка на ці дві книги становить 5%.
Якщо ми купуємо 3 різні книги, знижка становить 10%.
Якщо ми купуємо 4 різні книги, знижка становить 20%.
Якщо ми купуємо всі 5, знижка становить 25%.
Зауважмо, що якщо ми купуємо чотири книги, з яких 3 різні за назвою, знижка 10% діє на ті 3, що утворюють набір, але четверта книга все одно коштує $8.
Ваше завдання - написати код, який обчислює ціну будь-якого можливого кошика покупця (що містить лише книги однієї серії) і дає якомога більшу знижку.
Наприклад, скільки коштує такий кошик книг?
Ці 8 книг можна згрупувати, наприклад, так:
Це дало б такий підсумок:
Що дає:
Що дорівнює $51.60.
Однак ці самі 8 книг можна згрупувати й інакше:
Це дало б такий підсумок:
Що дає:
Що дорівнює $51.20.
І $51.20 - це ціна з найбільшою знижкою.
У цій вправі визначено підтип Book для натуральних чисел від 1 до 5.
Підтип можна уявити як пару ⟨x, h⟩, де x - значення, а h - доведення його коректності.
Значення всередині підтипу (у цьому випадку x) можна отримати через .val, наприклад x.val.
Його доведення можна отримати через .property, наприклад x.property.
До обох також можна дістатися за допомогою зіставлення зі зразком, як завжди.