Займаючись важкою атлетикою, я хочу зробити конкретну вагу, прикріпивши до планки кілька пластин.
У мене є такі таблички:
- 6 тарілок по 1 кг кожна
- 6 тарілок по 2,5 кг кожна
- 6 тарілок по 5 кг кожна
- 6 тарілок по 10 кг кожна
Сама штанга важить 10 кг.
Пластини можна прикріплювати лише парами - вони прикріплені на кожному кінці бруска, а розташування на двох кінцях має бути повністю симетричним (наприклад, прикріплення двох пластин 5 кг на одному кінці та однієї 10-кг кг плити інший кінець заборонений з міркувань безпеки).
Складіть програму або функцію, яка підкаже мені, скільки табличок кожного виду я повинен використовувати, щоб отримати задану загальну вагу. Вхід є цілим числом більше 11; вихід - це список / масив / рядок з 4 чисел. Якщо неможливо комбінувати існуючі таблички, щоб отримати цільову вагу, вивести нульовий / порожній масив, недійсний рядок, викинути виняток або щось подібне.
Якщо існує кілька рішень, код повинен виводити лише одне (не примушуйте користувача вибирати - він занадто зайнятий іншими речами).
Тестові приклади:
12 -> [2 0 0 0] - 2 plates of 1 kg plus the bar of 10 kg
13 -> [0 0 0 0] - a special-case output that means "impossible"
20 -> [0 0 2 0] - 2 plates of 5 kg + bar
20 -> [0 4 0 0] - a different acceptable solution for the above
21 -> [6 2 0 0] - 6 plates of 1 kg + 2 plates of 2.5 kg + bar
28 -> [0 0 0 0] - impossible
45 -> [0 2 6 0] - a solution for a random number in range
112 -> [2 4 6 6] - a solution for a random number in range
121 -> [6 6 6 6] - maximal weight for which a solution is possible
Якщо ваш код видає цифри у зворотному порядку (від важкої до легкої), будь ласка, вкажіть це прямо, щоб уникнути плутанини.