Мне понравилось читать этот сайт; это мой первый вопрос Редактирование приветствуется.
Для заданных натуральных чисел n и m вычислить все упорядоченные разбиения m на ровно n частей целых положительных целых частей и вывести их, разделенные запятыми и символами новой строки. Любой порядок в порядке, но каждый раздел должен появляться ровно один раз.
Например, если задано m = 6 и n = 2, возможные разбиения - это пары натуральных чисел, сумма которых равна 6:
1,5
2,4
3,3
4,2
5,1
Обратите внимание, что [1,5] и [5,1] являются различными упорядоченными разделами. Вывод должен быть точно в указанном выше формате, с дополнительным завершающим переводом строки. (РЕДАКТИРОВАТЬ: Точный порядок разделов не имеет значения). Вход / выход осуществляется через стандартный код-ввод / вывод для гольфа .
Другой пример вывода для m = 7, n = 3:
1,1,5
1,2,4
2,1,4
1,3,3
2,2,3
3,1,3
1,4,2
2,3,2
3,2,2
4,1,2
1,5,1
2,4,1
3,3,1
4,2,1
5,1,1
Наименьший код в байтах после 1 недели выигрывает.
Опять же, отредактируйте, если необходимо.
Приложение:
@TimmyD спросил, какой размер целочисленного ввода должна поддерживать программа. За примерами нет жесткого минимума; действительно, выходной размер увеличивается в геометрической прогрессии, примерно моделируясь: lines = e ^ (0,6282 n - 1,8273).
n | m | lines of output
2 | 1 | 1
4 | 2 | 2
6 | 3 | 6
8 | 4 | 20
10 | 5 | 70
12 | 6 | 252
14 | 7 | 924
16 | 8 | 3432
18 | 9 | 12870
20 | 10 | 48620
22 | 11 | 184756
24 | 12 | 705432
Ответы:
Pyth, 14 байт
Попробуйте онлайн: демонстрация или тестовый набор
Объяснение:
источник
jjL\,fqsTQ^SQE
.Python 3, 77 байт
Рекурсивная функция, которая создает каждую выходную строку и печатает ее. Пробует каждое возможное первое число, возвращаясь вниз, чтобы найти решение с соответствующей уменьшенной суммой
n
и на одно меньшее слагаемоеm
и префиксом строкиs
с этим числом. Если и требуемая сумма, и число слагаемых равны 0, мы достигли отметки, поэтому распечатываем результат, обрезая начальную запятую. Это проверяется какm|n
0 (Falsey).79 символов в Python 2:
источник
CJam, 22 байта
Попробуйте онлайн в интерпретаторе CJam .
Как это устроено
источник
Pyth,
2018 байтов-2 байта @Dennis!
Это принимает
n
как первую строку ввода, аm
в качестве второй.Попробуй это здесь .
источник
Haskell, 68 байт
Пример использования:
Как это работает:
sequence $ replicate n list
создает все комбинацииn
элементов нарисованной формыlist
. Мы принимаем все такиеx
из[1..m]
которыхsum
равноm
.unlines
иinit$tail$show
создайте требуемый формат вывода.источник
Dyalog APL , 33 байта
Принимает
m
как левый аргумент,n
как правый аргумент.Почти половина (между
{
и⍺
) предназначена для необходимого форматирования.источник
Mathematica, 65 байт
IntegerPartitions
делает задачу Остальное просто заказать кортежи и отформатировать результат.источник
Питон 3, 112
Я не управлял 1 лайнером некоторое время. :)
источник
Python 2,7,
174170152 байтаТучный ответ. По крайней мере, это читабельно :)
источник
>
, послеreplace
и после запятой.Юлия, 105 байт
Это функция, которая считывает два целочисленных аргумента и записывает результаты в STDOUT с одним завершающим переводом строки.
Ungolfed:
источник
Perl 6 , 54 байта
Если бы вывод мог быть списком списков
То, как это в настоящее время сформулировано, я должен добавить
join
в лямбду.источник