Дан массив целых чисел, a
который содержит n целых чисел и одно целое число x
; удалить наименьшее количество элементов, a
чтобы сделать сумму a
равной x
. Если никакие комбинации не a
могут сформироваться x
, вернуть ложное значение.
Как указано в комментарии, это максимальный набор с суммой х , извините мой меньший математический мозг. Я забыл много терминов с колледжа.
Примеры (правда):
f([1,2,3,4,5,6,7,8,9,10], 10) = [1,2,3,4]
f([2,2,2,2,2,2,2,2,2], 10) = [2,2,2,2,2]
f([2,2,2,2,-2,-2,-2,-4,-2], -8) = [2,2,-2,-2,-2,-4,-2]
f([-2,-4,-2], -6) = [-4,-2] OR [-2,-4]
f([2,2,2,4,2,-2,-2,-2,-4,-2], 0) = [2,2,2,4,2,-2,-2,-2,-4,-2]
(Без изменений)
f([], 0) = []
(Неизменный случай с нулевой суммой)
Примеры (Falsy, любое непротиворечивое значение не из массива):
Невозможно сделать дело: f([-2,4,6,-8], 3) = falsy (E.G. -1)
Случай с нулевой суммой: f([], non-zero number) = falsy (E.G. -1)
- Примечание. Любое значение, например,
[-1]
не может быть допустимым для ложных значений, поскольку это потенциальный достоверный вывод.
Правила:
- Входные данные могут быть приняты в виде массива или в виде списка аргументов, последний или первый
x
. - Выходными данными может быть любой список целых чисел с разделителями. НАПРИМЕР
1\n2\n3\n
или[1,2,3]
. - Любое значение может быть использовано в качестве ложного индикатора, кроме массива целых чисел.
- Ваш код должен максимизировать размер конечного массива, порядок не имеет значения.
- Например, для
f([3,2,3],5)
обоих[2,3]
и[3,2]
одинаково действительны. - Например, для
f([1,1,2],2)
вас можно вернуть только[1,1]
как[2]
короче.
- Например, для
- И сумма,
a
и значениеx
будут меньше2^32-1
и больше чем-2^32-1
. - Это код-гольф , выигрывает наименьшее количество байт.
- Если существует несколько допустимых подмассивов одинакового размера, вывести их все будет недопустимо. Вы должны выбрать один и вывести его.
Дайте мне знать, если это было опубликовано, я не смог его найти.
Сообщения, которые я нашел, как это : Связанные, но закрытые , ...
источник
Ответы:
Брахилог , 8 байт
Попробуйте онлайн!
Ежемесячный брахилог ответ. Возвращает
false.
если это невозможно.объяснение
источник
Python 2 ,
108104 байтаПопробуйте онлайн!
-4 байта, благодаря Джонатану Аллану
Python 2 ,
108106 байтПопробуйте онлайн!
-2 байта, благодаря Джанатану Фреху
источник
range(-len(a),1)
и-l
сохранить 2, ноlambda a,n:[x for l in range(len(a)+1)for x in combinations(a,l)if sum(x)==n][-1]
сохраняет 405AB1E , 9 байтов
Попробуйте онлайн!
источник
Japt
-h
, 11 байтПопробуйте онлайн!
источник
Pyth , 8 байт
8 байт ( попробуйте! ) - выводит только одно возможное решение. Для неразрешимых входных данных он ничего не печатает в STDOUT, которая является пустой строкой, которая технически говорит фальшиво в Pyth, но записывает в STDERR. Спасибо FryAmTheEggman за предложение об этом (игнорируя STDERR и фокусируясь только на выводе STDOUT), тем самым экономя 1 байт.
9-байт ( попробуйте! ) - выводит только одно возможное решение, включенное в одноэлементный список, как разрешено по умолчанию (например,
([1...10], 10) -> [[1,2,3,4]]; ([], 0) -> [[]]
). Для неразрешимых входных данных возвращается[]
, что в Pyth неверно .10 байт ( попробуйте! ) - для более четкого вывода, без использования правила синглтон-списка и использования,
0
а не[]
в качестве ложного значения.объяснение
Во-первых, код вычисляет powerset входного списка (все возможные упорядоченные его подгруппы). Затем он сохраняет только те коллекции, сумма которых равна входному номеру. Следует отметить, что коллекции создаются от самых коротких до самых длинных, поэтому мы сосредоточимся на последнем. Чтобы получить это:
lst[-1:]
вместоlst[-1]
ошибок избежать от броска для неразрешимых входов.источник
[]
это ложь? Ухоженная. Почему Пиф делает это[]
?f([], 0) = []
?Желе , 7 байт
Попробуйте онлайн!
Вывод уточнен по ТИО.
источник
Perl 6 ,
3837 байтПопробуйте онлайн!
Функция карри.
источник
;
даже необходимо?$^x
с$_
.)Брахилог , 4 байта
Попробуйте онлайн!
Примерно эквивалентно Fatalize
h⊇.+~t?∧
, за исключением намного короче, благодаря функции составления предиката, которая, согласно истории редактирования ссылки, находилась в процессе разработки до 8 января, после чего ответ был отложен более чем на два месяца.⟨⊇+⟩
это бутерброд , расширяющийся до{[I,J]∧I⊇.+J∧}
, где скобки в этом случае не имеют значения, так как бутерброд в любом случае находится на своей собственной линии.Гораздо менее драматичное преобразование ответа Фатализ, который использует те же самые предикаты с теми же переменными, но получается на байт короче из-за того, что они организованы иначе:
Брахилог , 7 байт
Попробуйте онлайн!
(Также, если кто-то хочет увидеть что-то странное, измените любое подчеркивание в тестовых случаях на дефис.)
источник
Pyth , 14 байт
Попробуйте онлайн!
источник
Чисто , 89 байт
Попробуйте онлайн!
Определяет функцию,
$ :: Int -> [Int] -> (Maybe [Int])
возвращающуюся,Nothing
если нет подходящей комбинации элементов, и(Just [elements...])
иначе.источник
JavaScript (ES6), 108 байт
Принимает вход как
(array)(n)
. Возвращает либо массив, либоfalse
.Попробуйте онлайн!
источник
Это началось круто и мало, но крайние случаи меня достали. Что бы ни случилось, я горжусь работой, которую я вложил в это.
Python 3 ,
169 161154 байтаПопробуйте онлайн!
источник
range(x)
генерирует(0...x-1)
? Тоrange(len(a))
есть вы не оставляете возможность оставить массив без изменений?if a==[] and x==0
использованияif sum(a)==x
. Тогда вы также можете удалить+1
изrange
.R ,
10080 байтПопробуйте онлайн!
20 байтов сохранено благодаря digEmAll
Возвращает
FALSE
по невозможным критериям.источник
Атташе , 28 байт
Попробуйте онлайн!
альтернативы
34 байта :
f[x,y]:=({y=Sum@_}\Radiations@x)@0
30 байтов :
First@${y&`=@Sum\Radiations@x}
29 байт :
{(_&`=@Sum\_2)@0}#/Radiations
29 байт :
${({y=Sum@_}\Radiations@x)@0}
29 байт :
`@&0@${y&`=@Sum\Radiations@x}
29 байт :
{_}@@${y&`=@Sum\Radiations@x}
объяснение
источник
APL (NARS), 65 символов, 130 байтов
↓ используется потому, что первым элементом набора множеств будет одно пустое множество (здесь ⍬ Зильда), которое нужно исключить, потому что кажется, что + / ⍬ равно нулю ...
Если не найти или ошибка, он вернет ⍬ или в печатном тексте:
тест:
источник