Biorąc pod uwagę ciąg różnych znaków i liczbę n, wygeneruj wszystkie uporządkowane kombinacje z powtórzeniami, o długości od 1 do n, używając tych znaków.
Innym sposobem zdefiniowania tego jest widzenie podanych znaków jako „niestandardowe” cyfry w podstawie (podstawa) liczby znaków, wówczas program powinien wygenerować wszystkie „cyfry” z 1 do n cyfr w tej bazie, jednak wiodące Uwzględniono także „zera”.
Kombinacje należy uporządkować według długości (najpierw 1 znak, potem 2 itd.), Ale poza tym mogą być w dowolnej kolejności. Możesz wybrać najwygodniejsze sposoby obsługi danych wejściowych i wyjściowych. Najkrótszy kod wygrywa.
Przykłady:
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
źródło
Odpowiedzi:
APL (Dyalog Unicode) , 13 bajtów SBCS
Wypróbuj online!
nigdy nie przegap okazji na skorzystanie ze skanu :)
monituje o ciąg „cyfr”, a następnie o
n
dzięki @ Adám za informację, jak włączyć
]box
TIOźródło
Python 2, 56 bajtów
n
jest maksymalną długością is
powinna być listą znaków. Nie jest dla mnie jasne, czy n = 0 lub pusta lista znaków są poprawnymi danymi wejściowymi, ale ta funkcja również obsługuje je poprawnie.źródło
J, 41 znaków
źródło
APL (31)
Zastosowanie: lewy argument jest ciągiem, a prawy argument jest liczbą:
Dane wyjściowe są uporządkowane według długości, ale w grupach długości są one przesunięte o jedną w lewo, co było najłatwiejsze.
Wyjaśnienie:
,/⍺∘{
...}¨⍳⍵
: dla 1..⍵ zastosuj funkcję do ⍺ i połącz wyniki razem.(⍵⍴⍴⍺)⊤⍳⍵*⍨⍴⍺
: dla każdej liczby od 1 do (⍵ = (aktualna długość)) ^ (⍴⍺ = (ilość znaków)), przekonwertuj na bazę ⍴⍺ za pomocą ⍵ cyfr.1+
: dodaj jeden, ponieważ tablice są indeksowane 1.⍺[
...]
: użyj ich jako indeksów w ciągu↓⍉
: obróć macierz, aby „liczby” znajdowały się w wierszach zamiast w kolumnach, a następnie podziel macierz na rzędy.źródło
?!/\-+*~&=,.|
i prawdopodobnie jeszcze więcej. Istnieją jednobajtowe kodowania APL, ale Unicode jest łatwiejszy w użyciu.Haskell, 34 znaki
Proste użycie monady listy. Jedynym prawdziwym golfem jest użycie
mapM
zamiast bardziej idiomatycznych (i krótszych),replicateM
które wymagałyby importuControl.Monad
.Stosowanie
źródło
Python,
9794t=t+[s]
nie można go skrócić,t+=[s]
ponieważ L i t wskazywałyby na tę samą listę.Wejście:
'ab', 3
Wynik:
źródło
Mathematica
29 1928Stosowanie
źródło
MATL,
98 bajtówWypróbuj na MATL Online!
(MATL został stworzony po opublikowaniu tego wyzwania, ale sądzę, że w dzisiejszych czasach meta konsensus jest w porządku).
(-1 bajtów dzięki @Luis Mendo.)
x
- usuń ciąg znaków ze stosu (automatycznie kopiuje go do schowka G):"
- niejawne wprowadzenie liczby n, pętla od 1 do n1G
- wklej ciąg wejściowy ze schowka G na stosie@
- przesuń aktualny wskaźnik iteracji pętliZ^
- moc kartezjański: iloczyn kartezjański wejścia ze sobą@
kilka razyKartezjańskie wyniki mocy (
@
„cyfry” w danej bazie) są gromadzone na stosie i domyślnie wyświetlane na końcu.źródło
x:"1G@Z^
Python - 106
Proste, nietwórcze rozwiązanie. Jeśli znajdziesz znaczące ulepszenia, prześlij jako osobną odpowiedź.
Wejście:
"ab",3
Wyjście:
źródło
Python, 100
Pochodzi z rozwiązania @ aditsu .
Wejście:
'ab', 3
Wynik:
źródło
Perl 5 +
-nlF -M5.010 -MList::Util+(uniq)
, 41 bajtówWypróbuj online!
-1 bajt dzięki @Xcali !
źródło
Pyth, 6 bajtów
Oczekuje zestawu znaków jako pierwszego wejścia, a liczby cyfr jako drugiego. Bajt mógłby zostać zapisany, gdyby istniała metoda jednobajtowa pozwalająca na wielokrotny dostęp do 2. wejścia, ale niestety ...
Wypróbuj online tutaj .
źródło
Perl 6 , 33 bajtów
Wypróbuj online!
Anonimowy blok kodu, który pobiera ciąg i liczbę i zwraca listę ciągów.
źródło
PHP 180
Nie mam pojęcia ... Czuję się leniwy.
źródło
Erlang 110
Wersja kombinatora Y (dla powłoki):
źródło
Erlang 89 (118)
Wersja modułu:
Znaki zliczane bez obowiązkowej księgowości (moduł i eksport).
źródło
Ruby , 73 bajty
Wypróbuj online!
źródło
Japt , 9 bajtów
Objaśnienia do naśladowania.
Spróbuj
Spróbuj
źródło
Galaretka , 6 bajtów
Wypróbuj online!
Podanie funkcji, przyjmowanie listy cyfr jako pierwszego argumentu i liczby cyfr jako drugiego. Same cyfry mogą być dowolnymi typami danych Jelly, ale użyłem liczb całkowitych w powyższym linku TIO, ponieważ daje to najlepiej wyglądające wyjście w automatycznym opakowaniu Jelly „funkcja → pełny program”.
Wyjaśnienie
Produkt kartezjański skutecznie daje nam wszystkie liczby z określoną liczbą cyfr (zgodnie z jakim prefiksem pracujemy). Więc skończyć z listy wykazów połączeń (pogrupowane według długości) i można spłaszczyć, że jeden poziom w celu uzyskania listy, która nie jest zgrupowany (ale który wciąż klasyfikowane pod względem długości, jak wymaga kwestia, jak
Ẏ
robi nie zmieniaj względnej kolejności elementów iƤ
najpierw spróbuje użyć krótszych prefiksów).źródło
05AB1E , 6 bajtów
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
6-bajtowa alternatywa:
UWAGA: Elastyczne wyjście: Wyświetla nową listę dla każdej długości, wszystkie na tej samej linii wydruku.
Konwersja do pojedynczej listy byłaby 2 bajty dłuższa:
Lv²yã`})
( Wypróbuj online ).Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
K (ngn / k) , 17 bajtów
Wypróbuj online!
źródło