Самородки коду
Це гіпотетична ситуація, коли ввечері в п'ятницю, і ви запросили звичайних товаришів з гольфу взяти участь у вашому улюбленому хобі: кодовому гольфі. Однак, оскільки це таке завдання для виведення мозку, вам потрібно підібрати трохи їжі для мозку для групи, щоб ви могли якомога більше пограти у свій код.
Зараз улюблена закуска кожного - курячі нагетси, але є проблема: не існує жодної упаковки, яка б відповідала всім потребам. Отже, оскільки ви вже в настрої для гольфу, ви вирішили створити програму, яка точно визначає, які пакети ви повинні придбати, щоб мати змогу покрити всі потреби Нуггета.
Розміри пачок для курячих самородків є всюди, і залежно від того, де ви живете в світі, змінюються і стандартні розміри. Однак найближче [місце, яке обслуговує самородки] зберігає такі розміри пакетів самородків:
4, 6, 9, 10, 20, 40
Тепер ви можете помітити, що ви не можете замовити певні комбінації самородків. Наприклад, 11самородки неможливі, оскільки немає комбінації, яка б 11точно дорівнювала . Однак ви можете зробити 43, отримавши 1 пачку 20, 1 пачку 10, 1 упаковку 9і 1 пачку 4,
20 + 10 + 9 + 4 = 43 (597)
де 597кожен термін складається в квадрат і додається разом (натяк: оптимальне рішення має це як найвище значення) . Звичайно, існують і інші способи виготовлення 43, але, як відомо, чим більше самородків в упаковці, тим дешевше вони отримують за саморобку. Отже, ви хочете в ідеалі придбати найменшу кількість пачок і в найбільшій кількості, щоб мінімізувати свої витрати.
Завдання
Ви повинні створити програму або функцію, яка містить список цілих чисел, що відповідають вимогам кожної людини. Потім слід обчислити та роздрукувати найвигідніший порядок α , щоб придбати курячі самородки. Найвигідніший порядок α - це комбінація, за якою сума квадратів кожної величини є найвищою. Якщо немає абсолютно ніякого способу , щоб купити самородки відмінно, ви повинні надрукувати на falsy значення , наприклад 0, False, Impossible!або все , що є на вашій мові.
Приклад вводу / виводу:
[2 7 12 4 15 3] => [20 10 9 4]
1, 1, 2, 1 => False
6 5 5 5 5 5 9 => 40
[6, 4, 9] => 9 10
1 => 0
199 => 40, 40, 40, 40, 20, 10, 9
2 => Impossible!
Ось перелік ідеальних рішень для перших 400. Зверніть увагу, вони не форматовані так, як я б очікував, що це буде ваше, кожне tupleу формі (N lots of M).
Правила
- Немає стандартних лазівки
- Немає використання вбудованих функцій, які виконують все або більшість завдань, наприклад,
FrobeniusSolveу Mathematica.
α - Щоб уточнити це на прикладі, ви також можете зробити 43, зробивши це 4 + 6 + 6 + 9 + 9 + 9 = 43 (319), але це не було б оптимальним і, таким чином, невірним результатом, оскільки сума квадратів менша, ніж комбінація, яку я зазначив у вступі. По суті, більша сума квадратів = менша вартість = найбільш економічна.