Создайте код, который принимает список и число в качестве входных данных и генерирует все возможные комбинации с длиной номера. Например, со списком {0,1} и номером 2 :
00
01
10
11
Ваша программа не должна ожидать появления символов в списке дважды или чаще, например {0,0,0,0,0,1,1,5,5}
Убедитесь, что вы распечатали отсортированные комбинации в порядке списка:
Со списком {0,1} и числом 5 (сгенерированным некоторым моим кодом, который слишком длинен, чтобы выиграть):
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
Но со списком {1,0} и номером 2 :
11
10
01
00
Как видите, обратный список означает обратный порядок.
Посмотрите на структуру, это как дерево.
Это код-гольф, поэтому выигрывает самый короткий код в байтах!
Ответы:
Желе , 1 байт
TryItOnline
Встроенный в декартову степень атом, как двоичная связь с левым аргументом элементов и правым аргументом count, или как полная программа с первым аргументом элементов и вторым аргументом count.
источник
Haskell, 20 байтов
Пример использования:
replicate
делаетn
копии 2-го параметра иmapM id
строит комбинации. Кстати,mapM id
то же самоеsequence
, но на 1 байт меньше.источник
MATL , 2 байта
Декартово властное построение ...
Попробуйте онлайн!
источник
Pyth, 2 байта
Программа, которая принимает данные в форме
list,number
и печатает список списков.Тестирование
Как это устроено
источник
Perl 6 , 15 байт
Объяснение:
источник
JavaScript (Firefox 30+), 55 байт
Я уверен на 99%, что рекурсия - лучший способ сделать это в JavaScript.
источник
Perl, 30 байт
28 байт кода +
-nl
флаг.Чтобы запустить это:
Я думаю, что использование ввода в качестве списка чисел логично для Perl. Однако, если мы допустим некоторую фантазию и возьмем ввод с помощью скобок и запятой (как показано в вопросе), мы можем уменьшить размер до 20 байт :
Пояснения:
glob
первоначальная цель в Perl - это список и перебор имен файлов, но когда его аргумент содержит фигурные скобки, он генерирует комбинации, сформированные из одного элемента каждой группы скобок.-a
автоматически разделяет пробелы на входе и помещает результат в@F
массив.$"
является разделителем списка: это разделитель, вставленный между элементами списка внутри строки. Мы устанавливаем это,
, поэтому"{@F"}
производит{.,.}
(если@F
содержит 0 и 1).Затем
x
оператор повтора строки (и<>
получает одну строку ввода).И, наконец,
say for
перебирает список, созданныйglob
и печатает элементы.источник
Mathematica, 6 байтов
Все еще хуже, чем желе :(
использование
источник
Python, 57 байт
repl.it
Безымянная функция, принимающая список объектов
o
и счетчикn
и возвращающая список комбинаций.источник
Чистый Баш, 36
Ввод с помощью параметров командной строки - список представляет собой разделенный запятыми список в фигурных скобках, например:
Обратите внимание, что список ввода должен быть заключен в кавычки, чтобы вызывающая оболочка не раскрыла его слишком рано.
Ideone .
источник
bash a.sh "{0,1}" 2
->{0,1}{0,1}
(версия 4.4.5 (1) -релиз)R ,
5345 байтПопробуйте онлайн!
rev
должен соответствовать точному порядку сортировки, который запрашивается (что на самом деле не кажется существенным для проблемы) и добавляет 5 байтов.источник
rev
за 45 байтов :)Ракетка 123 байта
Ungolfed:
Тестирование:
Выход:
источник
PHP, 109 байт
Принимает длину в качестве первого аргумента и список в качестве любых дальнейших аргументов.
Используйте как:
При запросе длины 0 возникнет фатальная ошибка «недостаточно памяти».
источник
05AB1E ,
21 байтс-1 байт благодаря @Enigma .
Попробуйте онлайн.
Введите как
number\nlist
, вывод как список списков.Объяснение:
источник
I
здесь.I
потому что я изначально пытался выяснить, как иметь несколько входов, а номер и список поменялись местами. Довольно глупо держатьI
там .. Спасибо!