Schreiben Sie eine Funktion, die eine Reihe von Ganzzahlen als Eingabe verwendet (dies kann eine Liste, ein Array oder ein beliebiger anderer Container mit unterschiedlichen Nummern sein), und geben Sie die Liste aller Permutationen aus.
Python (95 Zeichen) :
p=lambda s:s and sum(map(lambda e:map(lambda p:[e]+p,p(filter(lambda x:x!=e,s))),s),[]) or [[]]
Es wäre schön, in derselben Sprache geschlagen zu werden, aber Implementierungen in anderen Sprachen sind mehr als willkommen!
code-golf
combinatorics
permutations
zxul767
quelle
quelle
Python, 52
Input ist eine Menge. Die Ausgabe ist eine Liste von Listen.
Dies ist kürzer als die Antwort, die die ganze Arbeit mit einem eingebauten erledigt .
quelle
J, 11 Zeichen
Verwendung:
Erläuterung:
i.@!@#
verwendet drei Verben, um eine Liste von 0 bis (! n) -1 zurückzugeben, wobei n die Anzahl der Elemente in der angegebenen Liste ist.[
gibt die Liste selbst zurück. In dem gezeigten Beispiel gibt das0 1 2 3 4 5 A. 1 3 5
.A.
gibt eine mögliche Permutation der zweiten Liste für jedes Element in der ersten Liste zurück (Art von - die richtige Erklärung finden Sie hier ).quelle
Python - 55 Zeichen
quelle
Haskell,
4443Im Wesentlichen das Gleiche wie die Lösung von ugoren, aber Haskell ist besser darin, Listen zu verstehen!
Natürlich kann es auch
30
Effizienterer Ansatz, der keinen Gleichstellungsvergleich erfordert:
92
Aus diesem Grund funktioniert dies auch, wenn die Liste doppelte Elemente enthält.
quelle
p=Data.List.permutations
. Es fühlt sich an, als würde man schummeln. AuchData.List.permutations
nicht ausgibt , die Permutationen in lexikographische Ordnung.p[]=[[]]
stattdessen als Basisfall schreiben und dabei zwei Bytes sparen.in Q (48)
Beispielnutzung:
quelle
Rubin - 23 Zeichen
beispielsweise
f[[1,2,3]]
gibt diese .aber mit
[].permutation
fühlt sich an wie Betrug, so:Rubin - 59 Zeichen
getestet mit
quelle
f(array) { return array.sort(); }
Python - 58 Zeichen
Etwas kürzer als bei Ugoren, wenn man einen Satz als Eingabe nimmt:
quelle
C,
270243239 ZeichenDie Funktion P (n, a) liefert einen Zeiger auf das n! Permutationen von a, nacheinander in einem riesigen Array gepackt.
quelle
<malloc.h> isn't needed (ignore the warnings).
sizeof n` ist 4 (Portabilität ist schön, aber kürzer ist schöner). Verwenden Sie zusätzliche Parameter als Variablen (zp(n,a,N,i)
. B. ).int*p(..)int*a,o;
. Oft hilft es, globale Variablen anstelle von Parametern und Rückgabewerten zu verwenden.K, 30 Bytes
Keine eingebauten!
quelle
JS -
154146 Zeichenfunction f(x){var a=[],m;(m=x.length)>1?f(x.slice(1)).map(function(y){for(l=m;l--;a.push(y.slice(0,l).concat(x[0],y.slice(l))));}):a=[x];return a}
Test:
f([1,2,3,4,5]).map(function(a){return a.join('')}).join('\n')
gibt dies zurück .quelle
R
Da es sich um Permutationen handelt, lassen Sie mich mindestens eine Lösung in R zeigen:
quelle
Perl 188
Keine Bibliotheksroutinen, keine Rekursion
quelle
Scala 30:
Scala 195, quick'n'dirty, ohne Permutationen aus der Bibliothek:
Scala 293, ausgewachsen, typsicherer Iterator:
quelle
Python - 50 Zeichen
quelle
Pyth, 4 Bytes
Ja, Pyth wurde erstellt, nachdem diese Herausforderung veröffentlicht wurde. Das ist immer noch sehr cool. : D
Live-Demo.
Das Lesen von stdin ist ein Byte kürzer:
quelle
JavaScript
143136134123quelle
js function p(s,a="",c="",i,z=[]){
js function p(s,a,c,i,z){if(!z)a=c="",z=[]
Brachylog , 2 Bytes
Probieren Sie es online!
quelle
Python, 53 Bytes
quelle
Gelee , 2 Bytes
Probieren Sie es online!
Yay für builtins!
quelle
K (oK) , 3 Bytes
Lösung
Probieren Sie es online!
Erläuterung:
Es handelt sich um eine integrierte 3-Byte - Verknüpfung zu der folgenden integrierten 47-Byte-Funktion:
... der auf 23 Bytes verkürzt werden kann, wenn wir wissen, dass wir eine Liste von Ints als Eingabe erhalten:
quelle
Axiom, 160 Bytes
ungolfed
All dies ruft eine Bibliotheksfunktion auf, die die Permutation für den Index angibt (nur Ganzzahlen als Permutation wie Permutationen für [1], Permutationen für [1,2], Permutationen für [1,2,3] usw.) von Indizes und bauen die Listen; Man muss beachten, dass dies für jede Liste vom Typ X gut zu kompilieren scheint
quelle
Japt , 1 Byte
Japt-Dolmetscher
Dies wurde gestoßen und hatte keine Antwort von Japt, also dachte ich, ich würde weitermachen und eine hinzufügen.
á
Wenn es auf ein Array angewendet wird und keine Argumente enthält, ist das eingebaute Element für "alle Permutationen abrufen". Das-R
im Interpreter-Link verwendete Flag ändert nur, wie das Ergebnis gedruckt wird.quelle
APL (NARS), 39 Zeichen, 78 Byte
Prüfung:
quelle
05AB1E -
21 Bytesœ
Die Eingabe muss ein Array / eine Liste sein.
Erläuterung:
Dank Erik the Outgolfer ein Byte gespart
quelle