Первый вопрос здесь, не кричите на меня, если это дубликат или плохой вызов.
Вступление
Я сам подумал об этой задаче, и она кажется хорошей основной головоломкой для начинающих любителей кода. Это также может помочь мне решить, какой язык для игры в коде изучать.
Вызов
Учитывая массив целых чисел, которые меньше или равны n
, выведите или верните минимальное количество чисел из массива, которые в сумме точно n
.
Вы можете написать функцию или полную программу.
вход
Вы можете смело предполагать 0 <= n < 2^31
.
Возьмите массив или список любого вида ( vector
для C ++ или Java LinkedList
допускается) вместе с n
необязательным параметром length
, который указывает длину массива.
Вы также можете принять входные данные в виде строки, разделенной пробелами, отделенной n
запятой или пробелом:
1 5 7 3 7 3 6 3 2 6 3,10
1 5 7 3 7 3 6 3 2 6 3 10
если проще.
Выход
Выведите или верните минимальное количество чисел из массива, которые в сумме составляют в точности n
. Используя приведенный выше пример:
1 5 7 3 7 3 6 3 2 6 3,10
Ваша программа должна напечатать:
2
так как минимальное количество чисел, сумма до 10
это 2
( 7
и 3
).
В случае, если решения не существует, выведите или верните либо отрицательное значение, 0
«Без решения» (хотя это не было бы разумно), ∞
(как предложено), либо любое другое ложное значение, за исключением пустой строки.
Пример ввода и вывода
Входные данные:
1 5 7 3 7 3 6 3 2 6 3,10
143 1623 1646 16336 1624 983 122,18102
5 6 9,12
Выход:
2
3
-1
счет
Это код-гольф, поэтому выигрывает самый короткий код в байтах.
Главный ответ будет принят на Рождество.
источник
false
для случаев без решений?Ответы:
Pyth,
1211 байтовЭто принимает
n
в качестве первой строки ввода и список во второй строке.Попробуй это здесь .
источник
Джапт ,
302118 байтОказалось, что был гораздо более эффективный метод. ;)
Проверьте это онлайн!(Примечание:
n-
было измененоn@X-Y}
на совместимость)Это принимает входные данные в виде массива, разделенного пробелами или запятыми, за которым следует число. Выходы
undefined
для тестовых случаев без решений.Я не могу поверить, что я не думал об этой версии, когда я первоначально написал это ...
С тех пор было сделано несколько оптимизаций, которые здесь пригодятся:
U
в начале программы обычно можно опустить.Ã
это ярлык для}
.n
теперь по умолчанию сортирует числа правильно.Каждый из них снимает байт, всего 15:
Проверьте это онлайн!
источник
Mathematica,
7365 байтЧистая функция, возвращает,
∞
если нет решения.источник
Python 3, 128 байт
Это не так хорошо, как хотелось бы, но я поработаю над этим позже.
источник
Mathematica, 45 байт
источник
CJam, 34 байта
Попробуйте онлайн . Формат ввода - это сумма, за которой следует список значений, например:
Обратите внимание, что это вызовет исключение, если решение не найдено. Исключение переходит к stderr, когда CJam запускается из командной строки, а правильный результат (
0
) по-прежнему выводится на стандартный вывод. Так что это соответствует консенсусу, установленному в Должны ли быть разрешены выходы с ошибкой?Код может выглядеть длиннее, чем вы ожидаете. Основная причина в том, что CJam не имеет встроенного для генерации комбинаций. Или, по крайней мере, это мое оправдание, и я придерживаюсь его.
Объяснение:
источник
JavaScript (ES6), 84 байта
объяснение
Принимает
Array
изNumber
с и вNumber
качестве аргументов. Возвращает число,Infinity
если нет результата. Это рекурсивная функция, которая вычитаетn
и удаляет каждый элемент из массива один за другим доn == 0
.Тестовое задание
Этот тест устанавливает
m
вInfinity
дальнейшем вместо как аргумент по умолчанию , чтобы заставить его работать в Chrome (а не только Firefox).Показать фрагмент кода
источник
Haskell, 72 байта
Возвращает,
0
если нет решения.Пример использования:
10 # [1,5,7,3,7,3,6,3,2,6,3]
->2
.Найти все подсписки входного списка,
l
которые имеют суммуn
. Возьмите длину каждого такого подсписка и отсортируйте. Добавить0
и возьмите первый элемент.Если список одноточечно разрешен для производства, например
[2]
, мы можем сэкономить 7 байт:n#l=minimum[length x|x<-subsequences l,sum x==n]
. В случае отсутствия решения, пустой список[]
возвращается .источник