Definieren Sie eine Präpend-Append-Sequenz mit einer Länge n
als Permutation der Zahlen 1, 2, ..., n
, die mit der folgenden Prozedur generiert werden können:
Beginnen Sie mit der Nummer
1
.Platzieren Sie diese Nummer für jede Nummer von
2
bisn
an den Anfang oder das Ende der Sequenz (entweder voranstellen oder anhängen , daher der Name der Sequenz).
Dies ist beispielsweise eine gültige Methode zum Generieren einer Prepend-Append-Sequenz der Länge 4:
1
21 [beginning]
213 [end]
2134 [end]
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu erstellen, die eine Zahl n
von 3
bis 30
als Eingabe verwendet und alle n
lexikografischen Längenfolgen mit vorangestelltem Anhang ausgibt oder zurückgibt (wenn Sie Zeichenfolgen und keine Listen ausgeben, werden Zahlen über 9 dargestellt) als Buchstaben a-u
, um die Länge der Zeichenkette zu erhalten). Zum Beispiel ist dies die Reihenfolge für n = 4
:
1234 [RRR]
2134 [LRR]
3124 [RLR]
3214 [LLR]
4123 [RRL]
4213 [LRL]
4312 [RLL]
4321 [LLL]
Im Allgemeinen gibt es 2 n-1 Prepend-Append-Permutationen mit einer Länge n
.
Sie dürfen in Ihrem Code keine in Ihrer Sprache integrierten Sortierfunktionen verwenden. Das kürzeste Programm, um dies in einer Sprache zu tun, gewinnt.
quelle
a-u
. Können wir nur Zahlenlisten ausgeben?Antworten:
CJam,
22 20 1917 BytesCode-Erweiterung :
Wie es funktioniert :
Dies ist eine Debug-Version des Codes:
Mal sehen, wie es bei der Eingabe funktioniert
3
:Probieren Sie es hier online aus
quelle
Haskell, 47 Bytes
quelle
f n=[[n:x,x++[n]]|x<-f$n-1]>>=id
(mit der Code-Golfer-Concat-Funktion>>=id
).f n=[x++[n]|x<-f$n-1]++[n:x|x<-f$n-1]
,f n=map(++[n])(f$n-1)++[n:x|x<-f$n-1]
,f n=map(++[n])(f$n-1)++map(n:)(f$n-1)
,f n=(++[n])#n++(n:)#n;p#i=map p$f$i-1
Python 2, 68
Gibt eine Liste mit Nummernlisten aus.
Eine rekursive Lösung. Für
n==1
Ausgabe[[1]]
. Fügen Sie andernfallsn
den Anfang oder das Ende aller(n-1)
-Permutationen hinzu. Beim Voranstellen wird die Permutation später lexikografisch als beim Anhängen, sodass die Permutationen sortiert bleiben.Der "Boolesche Wert"
b
kodiert, ob[n]
am Anfang oder am Ende gesetzt werden soll. Tatsächlich verschieben wir den Rest der Listex
im Ausdruckx*b+[n]+x*-b
. Puttingb
as-1
oder1
lets use flip by negating, da eine mit multiplizierte Liste-1
die leere Liste ist.quelle
Pyth, 19
Probieren Sie es hier online aus
Dies ist ein vollständiges Programm, das Eingaben von stdin akzeptiert.
Dies funktioniert auf ähnliche Weise wie die Lösung von xnor, generiert jedoch Werte, die nicht in der richtigen Reihenfolge vorliegen, sodass sie neu angeordnet werden müssen. Was auf jeder Ebene passiert, ist, dass jeder vorherigen Werteliste der neue Wert am Ende und am Anfang hinzugefügt wird und diese jeweils in ein 2-Tupel eingeschlossen werden, die in einer Liste zusammengefasst sind. Im ersten Schritt wird beispielsweise Folgendes ausgeführt:
Dann wird diese Liste von Tupeln gezippt (und dann summiert, um die äußerste Liste zu entfernen). Im ersten Fall wird nur der nicht umbrochene Wert von oben angegeben, da die Liste nur einen Wert enthält.
Schritte mit 2-> 3:
quelle
Mathematica,
575449 BytesBeispiel:
quelle
J, 26 Bytes
1-Byte-Verbesserung dank FUZxxl .
quelle
,.
für,"1
für ein Zeichen.Pyth,
34333129Im Grunde eine Übersetzung von xnor ‚s Python Antwort . Ich bin immer noch nicht so gut mit Pyth, daher sind Verbesserungsvorschläge willkommen.
Definiert eine Funktion
y
zum Zurückgeben einer Liste mit ganzen Zahlen.Update: 2 Bytes dank FryAmTheEggman gespeichert .
Erläuterung:
quelle
-b1
können seintb
,[1_1)
können sein,1_1
(Sie können jedoch einfach die schließende Klammer fallen lassen, da Sie nur die zur Ausführung der Funktion erforderlichen Bytes zählen müssen, auch wenn Sie sie nicht aufrufen können, ohne sie zu schließen), und Sie Es muss nichtb
in eine Liste eingeschlossen werden, da Pyth beim Hinzufügen einer Liste zu einem Int automatisch in eine Liste konvertiert wird.[1,-1]
. Ich kann Bytes speichern, um etwas so Kurzes fest zu codieren, besonders wenn Sie die Logik vereinfachen. Ich bekommeL?]]1<b2sCm,+db+bdytb
Pure Bash, 103
Länger als ich gehofft hatte:
quelle
JavaScript (ES6) 73
80JavaScript-Implementierung der netten Lösung von @ Optimizer.
Rekursiv (73):
Iterativ (74):
Test In der Firefox / FireBug-Konsole
quelle
Meine Java-Lösung:
quelle
false
durch etwas ersetzen5<4
.