Це "аналог" чергової головоломки, Вісім монет для чесного короля на Puzzling.SE.
Ви можете прочитати вищезазначений пазл для фону. Деталі про цю головоломку наступні.
Створюється набір з 8 видів монет різної вартості, король хоче, щоб ви дізналися максимальний N такий, що будь-яку кількість ціни від 0 до N можна оплатити комбінацією не більше 8 монет і без зборів.
Наприклад, (взято з відповіді Глорфінделя). Якщо набір монет значеннями 1, 2, 5, 13, 34, 89, 233, 610, ваша програма повинна вивести 1596, оскільки кожне число між 0 і 1596 (включно) може бути представлене сумою не більше ніж 8 чисел із даного списку (номери можуть повторюватися), тоді як 1597 не можна представити таким чином.
Математично, якщо вхід - це множина S, що складається з 8 натуральних чисел, бажаний вихід N задовольняє, що для будь-якого числа n між 0 і N існує x1, x2, x3, ..., x8, таких що
Ваша мета - написати програму, функцію або фрагмент, який приймає 8 цифр як вхід, і виводить максимальний N, як описано вище.
Правила:
- Дозволено гнучко введення / виведення, тому програма може приймати дані в будь-якій формі, яка найкраще підходить. Ви можете припустити, що вхідні номери відсортовані так, як найкраще підходить вашій програмі.
- Будь ласка, вкажіть це у своїй відповіді, якщо ваша програма залежить від порядку введення
- Введення - це набір з 8 різних натуральних чисел (без нулів). Вихід - одне невід'ємне ціле число.
- Якщо у наборі введення немає 1, ваша програма повинна вивести 0, оскільки будь-яке число від 0 до 0 задовольняє вимозі.
- У випадку невірного введення (набір містить нульові, негативні або повторювані числа), ваша програма може робити все, що завгодно.
- Стандартні лазівки заборонені.
- Ваша програма повинна працювати протягом декількох хвилин на сучасному комп’ютері.
Тестові приклади (в основному взяті з відповідей під пов’язаним запитанням про Загадка):
[1, 2, 3, 4, 5, 6, 7, 8] => 64
[2, 3, 4, 5, 6, 7, 8, 9] => 0
[1, 3, 4, 5, 6, 7, 8, 9] => 72
[1, 2, 5, 13, 34, 89, 233, 610] => 1596
[1, 5, 16, 51, 130, 332, 471, 1082] => 2721
[1, 6, 20, 75, 175, 474, 756, 785] => 3356
Це кодовий гольф , тому виграє найкоротша програма або фрагмент кожної мови!