Generieren Sie mit einer Zeichenfolge aus verschiedenen Zeichen und einer Zahl n alle geordneten Kombinationen mit Wiederholung der Länge 1 bis n unter Verwendung dieser Zeichen.
Eine andere Möglichkeit, dies zu definieren, besteht darin, die angegebenen Zeichen als "benutzerdefinierte" Ziffern in der Basis (Radix) der Anzahl der Zeichen zu sehen. Das Programm sollte dann alle "Zahlen" mit 1 bis n Ziffern in dieser Basis generieren, jedoch führend "Nullen" sind ebenfalls enthalten.
Die Kombinationen sollten nach ihrer Länge geordnet sein (zuerst 1 Zeichen, dann 2 usw.), aber ansonsten können sie in beliebiger Reihenfolge sein. Sie können die bequemsten Methoden für die Verarbeitung von Ein- und Ausgaben auswählen. Der kürzeste Code gewinnt.
Beispiele:
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
quelle
Antworten:
APL (Dyalog Unicode) , 13 Byte SBCS
Probieren Sie es online aus!
Verpassen Sie nie die Gelegenheit, einen Scan zu verwenden :)
fordert zur Eingabe einer Zeichenfolge mit "Ziffern" und dann für auf
n
danke @ Adám, dass du mir gesagt hast, wie man
]box
TIO aktiviertquelle
Python 2, 56 Bytes
n
ist die maximale Länge unds
wird voraussichtlich eine Liste von Zeichen sein. Mir ist nicht klar, ob n = 0 oder eine leere Zeichenliste gültige Eingaben sind, aber diese Funktion behandelt sie auch korrekt.quelle
J, 41 char
quelle
APL (31)
Verwendung: Das linke Argument ist die Zeichenfolge und das rechte Argument ist die Zahl wie folgt:
Die Ausgabe ist nach Länge geordnet, aber innerhalb der Längengruppen sind sie um eins nach links verschoben. Dies war am einfachsten.
Erläuterung:
,/⍺∘{
...}¨⍳⍵
: Wenden Sie für 1..⍵ die Funktion auf ⍺ an und verbinden Sie die Ergebnisse.(⍵⍴⍴⍺)⊤⍳⍵*⍨⍴⍺
: Konvertieren Sie für jede Zahl von 1 bis (⍵ = (aktuelle Länge)) ^ (⍴⍺ = (Anzahl der Zeichen)) mit ⍵ Ziffern in die Basis ⍴⍺.1+
: füge eins hinzu, da Arrays 1-indiziert sind.⍺[
...]
: Verwenden Sie diese als Indizes für die Zeichenfolge↓⍉
: Drehen Sie die Matrix so, dass sich die 'Zahlen' in den Zeilen anstatt in den Spalten befinden, und teilen Sie die Matrix dann nach Zeilen auf.quelle
?!/\-+*~&=,.|
und wahrscheinlich noch mehr. Es gibt Einzelbyte-APL-Codierungen, aber Unicode ist einfacher zu verwenden.Haskell, 34 Zeichen
Unkomplizierte Verwendung der Listenmonade. Das einzig wahre Golfen ist die Verwendung von
mapM
anstelle der idiomatischeren (und kürzeren)replicateM
, die importiert werden müsstenControl.Monad
.Verwendungszweck
quelle
Python,
9794t=t+[s]
kann nicht verkürzt werden,t+=[s]
da L und t auf dieselbe Liste zeigen würden.Eingang:
'ab', 3
Ausgabe:
quelle
Mathematica
29 1928Verwendungszweck
quelle
MATL,
98 BytesProbieren Sie es auf MATL Online aus!
(MATL wurde erstellt, nachdem diese Herausforderung veröffentlicht wurde, aber ich glaube, dass dies heutzutage durch Meta-Konsens in Ordnung ist.)
(-1 Bytes dank @Luis Mendo.)
x
- Zeichenfolgeneingabe vom Stapel löschen (automatisch in die Zwischenablage G kopieren):"
- implizite Eingabe der Nummer n, Schleife von 1 nach n1G
- Fügen Sie die Eingabezeichenfolge aus der Zwischenablage G in den Stapel ein@
- Drücken Sie den aktuellen SchleifeniterationsindexZ^
- kartesische Macht: kartesisches Produkt der Eingabe mit sich selbst@
mehrmalsDie kartesischen
@
Potenzergebnisse ( -stellige "Zahlen" in der angegebenen Basis) werden auf dem Stapel akkumuliert und am Ende implizit angezeigt.quelle
x:"1G@Z^
Python - 106
Die unkomplizierte, unkreative Lösung. Wenn Sie signifikante Verbesserungen feststellen, geben Sie diese bitte als separate Antwort an.
Eingabe:
"ab",3
Ausgabe:
quelle
Python, 100
Abgeleitet von der Lösung von @ aditsu .
Eingang:
'ab', 3
Ausgabe:
quelle
Perl 5 +
-nlF -M5.010 -MList::Util+(uniq)
, 41 BytesProbieren Sie es online aus!
-1 Byte dank @Xcali !
quelle
Pyth, 6 Bytes
Erwartet den Zeichensatz als 1. Eingabe, die Anzahl der Ziffern als 2 .. Ein Byte könnte gespeichert werden, wenn es eine Einzelbyte-Methode gäbe, um wiederholt auf die zweite Eingabe zuzugreifen, aber leider ...
Probieren Sie es hier online aus .
quelle
Perl 6 , 33 Bytes
Probieren Sie es online aus!
Anonymer Codeblock, der eine Zeichenfolge und eine Zahl verwendet und eine Liste von Zeichenfolgen zurückgibt.
quelle
PHP 180
Ich habe keine Ahnung ... Ich fühle mich faul.
quelle
Erlang 110
Die Y-Kombinator-Version (für Shell):
quelle
Erlang 89 (118)
Modulversion:
Gebühren ohne obligatorische Buchhaltung (Modul und Export) gezählt.
quelle
Ruby , 73 Bytes
Probieren Sie es online aus!
quelle
Japt , 9 Bytes
Erklärungen folgen.
Versuch es
Versuch es
quelle
Gelee , 6 Bytes
Probieren Sie es online aus!
Funktionsübermittlung, wobei die Liste der Ziffern als erstes Argument und die Anzahl der Ziffern als zweites Argument verwendet werden. Die Ziffern selbst können beliebige Datentypen von Jelly sein, aber ich habe im obigen TIO-Link Ganzzahlen verwendet, da dies die bestaussehende Ausgabe in Jellys automatischem Wrapper "Funktion → Vollprogramm" erzeugt.
Erläuterung
Das kartesische Produkt gibt uns effektiv alle Zahlen mit einer bestimmten Anzahl von Ziffern (je nachdem, mit welchem Präfix wir arbeiten). Wir erhalten also eine Liste von Kombinationslisten (nach Länge gruppiert) und können diese eine Ebene reduzieren , um eine Liste zu erhalten, die nicht gruppiert ist (die jedoch nach Länge sortiert ist , wie es die Frage erfordert, wie dies nicht der
Ẏ
Fall ist) 'ändere nicht die relative Reihenfolge der Elemente undƤ
versuche zuerst kürzere Präfixe).quelle
05AB1E , 6 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
6-Byte-Alternative:
HINWEIS: Flexible Ausgabe: Gibt für jede Länge eine neue Liste in derselben Druckzeile aus.
Das Konvertieren in eine einzelne Liste würde 2 Bytes länger dauern:
Lv²yã`})
( Online ausprobieren ).Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
K (ngn / k) , 17 Bytes
Probieren Sie es online aus!
quelle