Учитывая строку различных символов и число n, сгенерируйте все упорядоченные комбинации с повторением, длиной от 1 до n, используя эти символы.
Другой способ определить это состоит в том, чтобы видеть данные символы как «пользовательские» цифры в базе (основание) числа символов, тогда программа должна сгенерировать все «числа» от 1 до n цифр в этой базе, однако ведущие "нули" тоже включены.
Комбинации должны быть упорядочены по длине (сначала 1 символ, затем 2 и т. Д.), Но они могут быть в любом порядке. Вы можете выбрать наиболее удобные способы обработки ввода и вывода. Самый короткий код выигрывает.
Примеры:
ab, 3
-> a,b,aa,ab,ba,bb,aaa,aab,aba,baa,abb,bab,bba,bbb
0123456789, 2
->0,1,2,3,4,5,6,7,8,9,00,01,...,09,10,11,...,99
code-golf
combinatorics
уйти, потому что SE это зло
источник
источник
Ответы:
APL (Dyalog Unicode) , 13 байтов SBCS
Попробуйте онлайн!
никогда не упускайте возможность использовать скан :)
запрашивает строку «цифр», а затем для
n
спасибо @ Adám за сообщение о том, как включить
]box
TIOисточник
Python 2, 56 байт
n
это максимальная длина и,s
как ожидается, будет список символов. Мне не ясно, являются ли n = 0 или пустой список символов допустимыми входными данными, но эта функция также обрабатывает их правильно.источник
J, 41 символ
источник
APL (31)
Использование: левый аргумент - это строка, а правый аргумент - это число, например:
Выходные данные упорядочены по длине, но в группах длин они смещены на одну влево, это было проще всего.
Объяснение:
,/⍺∘{
...}¨⍳⍵
: для 1..⍵, примените функцию к ⍺ и объедините результаты вместе.(⍵⍴⍴⍺)⊤⍳⍵*⍨⍴⍺
: для каждого числа от 1 до (⍵ = (текущая длина)) ^ (⍴⍺ = (количество символов)) преобразовать в базу ⍴⍺, используя ⍵ цифр.1+
: добавьте один, потому что массивы 1-индексированы.⍺[
...]
: использовать их как указатели в строке↓⍉
: поверните матрицу, чтобы «числа» находились в строках, а не в столбцах, а затем разбили матрицу по строкам.источник
?!/\-+*~&=,.|
и, возможно, еще больше. Существуют однобайтовые кодировки APL, но Unicode проще в использовании.Хаскель, 34 персонажа
Простое использование списка монады. Единственный реальный гольф - это использование
mapM
вместо более идиоматического (и более короткого),replicateM
что потребовало бы импортаControl.Monad
.Применение
источник
Питон,
9794t=t+[s]
не может быть сокращено до,t+=[s]
потому что L и T будут указывать на тот же список.Входные данные:
'ab', 3
Вывод:
источник
Mathematica
29 1928Применение
источник
MATL,
98 байтПопробуйте это на MATL Online!
(MATL был создан после того, как этот вызов был опубликован, но я полагаю, что это нормально при мета-консенсусе в наши дни.)
(-1 байт благодаря @Luis Mendo.)
x
- удалить строку ввода из стека (автоматически копирует его в буфер обмена G):"
- неявный ввод числа n, цикл от 1 до n1G
- вставить обратно строку ввода из буфера обмена G в стек@
- нажать текущий индекс итерации циклаZ^
- декартова сила: декартово произведение ввода с собой@
число разРезультаты декартовой мощности (
@
-значные «числа» в заданной базе) накапливаются в стеке и неявно отображаются в конце.источник
x:"1G@Z^
Питон - 106
Простое, нетворческое решение. Если вы найдете существенные улучшения, пожалуйста, отправьте в качестве отдельного ответа.
Вход:
"ab",3
Выход:
источник
Питон, 100
Полученный из раствора @ aditsu в .
Входные данные:
'ab', 3
Вывод:
источник
Perl 5+
-nlF -M5.010 -MList::Util+(uniq)
, 41 байтПопробуйте онлайн!
-1 байт благодаря @Xcali !
источник
Pyth, 6 байт
Ожидается набор символов в качестве 1-го ввода, количество цифр в качестве 2-го. Байт можно было бы сохранить, если бы существовал однобайтовый метод для повторного доступа ко второму входу, но, увы ...
Попробуйте это онлайн здесь .
источник
Perl 6 , 33 байта
Попробуйте онлайн!
Блок анонимного кода, который принимает строку и число и возвращает список строк.
источник
PHP 180
Понятия не имею ... Мне лень.
источник
Эрланг 110
Версия Y комбинатора (для оболочки):
источник
Эрланг 89 (118)
Версия модуля:
Символы учитываются без обязательного учета (модуль и экспорт).
источник
Рубин , 73 байта
Попробуйте онлайн!
источник
Japt , 9 байт
Пояснения, чтобы следовать.
Попробуй это
Попробуй это
источник
Желе , 6 байт
Попробуйте онлайн!
Передача функции, принимая список цифр в качестве первого аргумента и количество цифр в качестве второго. Сами по себе цифры могут быть любыми типами данных Jelly, но я использовал целые числа в ссылке TIO выше, потому что она дает лучший результат в автоматической обертке «function → full program».
объяснение
Декартово произведение эффективно дает нам все числа с заданным количеством цифр (в соответствии с каким префиксом мы работаем). Таким образом , мы в конечном итоге со списком списков комбинаций (сгруппированных по длине), и может выравниваться , что один уровень для того , чтобы получить список, не сгруппированных (но по - прежнему сортируются по длине, как этого требует вопрос, как и
Ẏ
Безразлично не меняйте относительный порядок элементов иƤ
сначала пытайтесь использовать более короткие префиксы).источник
05AB1E , 6 байтов
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
6-байтовая альтернатива:
ПРИМЕЧАНИЕ. Гибкий вывод: выводит новый список для каждой длины, все на одной и той же линии печати.
Преобразование его в один список будет на 2 байта длиннее:
Lv²yã`})
( Попробуйте онлайн ).Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
К (нгн / к) , 17 байт
Попробуйте онлайн!
источник