При выполнении тяжелой атлетики я хочу сделать определенный вес, прикрепив несколько пластин к штанге.
У меня есть следующие пластины:
- 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
Если ваш код выводит числа в обратном порядке (от тяжелой до легкой), укажите это явно, чтобы избежать путаницы.
источник
Ответы:
Желе , 22 байта
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
MATL ,
2928 байтДля входов, которые не имеют решения, это создает пустой вывод (без ошибок).
Попробуйте онлайн!
объяснение
источник
Mathematica, 70 байт
Анонимная функция. Принимает число в качестве входных данных и выводит список или ошибки и возвращает,
{}[[1]]
если решения не существует.источник
Желе, 25 байт
Попробуй это здесь.
источник
2,5,10,20
->2,5,⁵,20
,
диада? Вся моя жизнь - ложь,
- это диада, но она также может использоваться для литералов.2,5,⁵,20
не является буквальным , хотя (2,5
и20
есть, но,
,⁵
и,
являются атомы), так что вам нужно что - то , чтобы объединить ссылки.Python 3, 112 байт
Анонимная функция, которая принимает через аргумент ввод целевой массы и возвращает номер каждой пластины в виде списка. Если решения не существует, выдается ошибка. Это чистая грубая сила.
Как это работает
Попробуйте это на Ideone
источник
Брахилог , 50 байт
Возвращает,
false
когда это невозможно.источник
Pyth,
343125 байтТестирование.
Ошибки в невозможности.
По сути, это грубая сила.
Это довольно быстро, так как есть только 256 возможных соглашений.
источник
Scala, 202 байта
Решил, что Scala здесь не очень нравится, поэтому я представляю (возможно, не оптимальное) решение в Scala.
Программа выводит данные в обратном порядке и с дополнительным мусором по сравнению с решениями в пост. Если решение не найдено, выдается 0.
Примечание: я не смог удалить ни одной строки или пробела, потому что Scala тупой, поэтому я думаю, чтобы уменьшить размер, метод должен быть переделан, если я не пропустил что-то очевидное.
источник
APL, 40 байт
В ⎕IO ← 0. На английском:
10+2×,∘.+⌿1 2.5 5 10∘.×⍳4
: построить массив всех возможных весов, вычисляя 4D внешнюю сумму весов на весовой тип;⍵⍳⍨
: поиск по индексу заданного. Если не найдено, индекс равен 1 + подсчет массива на шаге 1;(4⍴4)⊤
: представить индекс в базе 4, то есть вычислить координату заданного веса в 4D пространстве;2×
: вывести результат в проблемное пространство, где координаты следует интерпретировать как половину числа пластин.Пример: {2 × (4⍴4) ⊤⍵⍳⍨10 + 2 ×, ⊃∘. + / ↓ 1 2.5 5 10∘. × ⍳4} 112 2 4 6 6
Бонус : поскольку APL является языком массивов, можно протестировать несколько весов одновременно. В этом случае результат транспонируется:
источник
JavaScript (ES6), 109 байт
Возвращает
00-2
при ошибке. Альтернативное решение, которое возвращаетundefined
ошибку, также 109 байт:источник