Für diese Herausforderung erstellen Sie eine Funktion (Ihre Funktion kann ein vollständiges Programm sein), die eine Liste als Eingabe verwendet und eine Permutation dieser Liste zurückgibt. Ihre Funktion muss die folgenden Anforderungen erfüllen.
Es muss deterministisch sein.
Wenn Sie Ihre Funktion mit einer variablen Anzahl von Malen zusammensetzen, sollte eine Liste mit beliebigen Permutationen erstellt werden können.
Dies ist eine Code-Golf-Frage, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.
Weitere Regeln
Sie können jede Art von Liste nehmen, (
[Integer]
,[String]
,[[Integer]]
), solange es- Kann nicht leer sein
- Kann verschiedene Objekte mit mindestens 16 möglichen Werten enthalten. (Sie können kein Haskell verwenden
[()]
und behaupten, Ihre Funktion seiid
) - Kann doppelte Objekte enthalten (keine Mengen)
Sie können ein Programm oder eine Funktion schreiben, müssen jedoch die Standard-E / A befolgen.
code-golf
permutations
Ad-hoc-Garf-Jäger
quelle
quelle
S_n
aber nur zyklisch fürn<3
next_permutation
Funktion.Antworten:
CJam (11 Bytes)
Online-Demo mit dem vollständigen Zyklus für eine Liste mit vier Elementen und einem doppelten Element.
Präparation
quelle
Mathematica + Combinatorica (integriertes Paket) 34 Bytes
19 Bytes zum Laden des Pakets und 15 Bytes für die Funktion.
Verwendungszweck:
Ohne die eingebauten 61 Bytes
Combinatorica soll vollständig in Mathematica integriert sein, aber ich denke, die NextPermutation-Funktion wurde übersehen.
quelle
Python 3 , 90 Bytes
Probieren Sie es online aus!
quelle
C ++, 42 Bytes
Diese genaue Operation ist in C ++ integriert.
quelle
#include
?JavaScript (ES6),
145139137134108 ByteDank @Neil satte 25 Bytes gespart!
Übernimmt die Eingabe als Array von alphabetischen Zeichen. Gibt die nächste Permutation als anderes Array zurück.
Wie?
Dies ist eine Generation in lexikografischer Reihenfolge , die bei jeder Iteration die folgenden 4 Schritte verarbeitet:
Finden Sie den größten Index X so, dass a [X] <a [X + 1]
Finden Sie den größten Index Y größer als X, so dass a [Y]> a [X]
Tauschen Sie den Wert von a [X] gegen den von a [Y] aus.
Sortieren Sie die Sequenz von [X + 1] bis einschließlich des letzten Elements in aufsteigender lexikografischer Reihenfolge
Beispiel:
Demo
Code-Snippet anzeigen
quelle
v<a[i+1]&&(t=v,x=i)
ein Byte gespart wird und Sie möglicherweise mehr Einsparungensplice
anstelle von zweislice
Sekunden erzielen können.map
auch für 112 Bytes zusammenführen:a=>(t=x=y=-1,a.map((v,i)=>v<a[i+1]?(t=v,x=i):y=i>x&v>t?i:y),a[x]=a[y],a[y]=t,t=a.splice(++x).sort(),a.concat(t))
a.concat(a.splice(++x).sort())
, dass es funktionieren würde, sonst hätte ich es versucht ...Gelee , 6 Bytes
Durchläuft die Permutationen in absteigender lexikografischer Reihenfolge.
Probieren Sie es online aus!
Wie es funktioniert
quelle
C 161 Bytes
Tatsächlicher O (n) -Algorithmus.
Anwendungsbeispiel:
quelle
Python 2 , 154 Bytes
Probieren Sie es online aus!
quelle
exec
mir alle möglichen Fehler in einer Funktion gegebenGelee , 10 Bytes
Probieren Sie es online aus!
Sortieren> Alle Permutation> Eingabe suchen> 1 hinzufügen> Index in "Alle Permutation"
quelle
Œ¿‘œ?Ṣ
). Ich hatte seitdem keine Lust mehr zu stehlen.Q
Ding zu benutzen . Sie können immer noch Golf spielenṢŒ!Qµi³‘ị
.05AB1E , 7 Bytes
Probieren Sie es online aus!
quelle
PHP , 117 Bytes
Nimmt Eingabe / Ausgabe als Zeichenfolgenliste der unteren Buchstaben
Probieren Sie es online aus!
quelle