Aufgabe
Ihr Ziel ist es, ein Programm zu schreiben, das bei gegebener Eingabezeichenfolge (oder einem Array von Zeichen) jede mögliche Permutation der Buchstaben in dieser Zeichenfolge ausgibt. Ich bin pingelig mit meiner Ausgabe, daher sollte sie alphabetisch sortiert sein, ohne Duplikate.
Beispiel:
Eingang: buzz
Ausgabe:
buzz
bzuz
bzzu
ubzz
uzbz
uzzb
zbuz
zbzu
zubz
zuzb
zzbu
zzub
Regeln
- Das ist Code-Golf, also gewinnt der kürzeste Code.
- Nachgestellte Leerzeichen in jeder Zeile sind in Ordnung
- Eine einzelne Zeile nach der letzten Zeile ist zulässig (aber nicht mehr).
code-golf
string
permutations
Brian Gradin
quelle
quelle
["buzz" "bzuz" "bzzu" "ubzz" "uzbz" "uzzb" "zbuz" "zbzu" "zubz" "zuzb" "zzbu" "zzub"]
?N*
zup
) entfernen könnte :-)Antworten:
Gelee , 5 Bytes
Probieren Sie es online!
Erläuterung
quelle
05AB1E ,
43 BytesAktualisiert, da ein Update auf
œ
die alte Version,die auch ein Byte wie von Magic Octopus Urn vorgeschlagen gespeichert brach .
Probieren Sie es online!
Erläuterung
quelle
œê»
ist in Ordnung für Nicht-Vermächtnis.œ
jetzt eine Liste der Zeichenfolgen in beiden zurückgegeben wird.MATL , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 3.5, 79 Bytes
Eine Funktion, die Eingaben als Liste von Zeichen und Ausgaben beim Drucken annimmt.
Erstellt rekursiv jede eindeutige Permutation, indem jedes mögliche nächste Zeichen alphabetisch aus den verbleibenden eindeutigen Zeichen herausgenommen und an die laufende Ausgabe angehängt wird
w
. Dann wiederholen wir den Vorgang, wobei dieses Zeichen entfernt wurde. Sobald die Eingabe geleert ist, drucken wirw
.quelle
CJam , 5 Bytes
Danke an @EriktheOutgolfer für eine Korrektur (
q
stattr
)Probieren Sie es online!
Erläuterung
quelle
Pyth - 5 Bytes
Probieren Sie es hier online aus .
quelle
S
wirklich gebraucht?Haskell, 46 Bytes
2 Bytes gespart dank nimi
quelle
f=
.J, 19 Bytes
Testfall
Erläuterung
Dies ist ein 4-Zug:
Grundsätzlich gilt:
quelle
[:~.i.@!@#A./:~
, Sie sollten ein paar Bytes sparenJavaScript (Firefox 30+),
129124 BytesNicht schlecht für eine Sprache ohne eingebaute Permutation ...
quelle
Python 3.5, 81 Bytes:
Wirklich ... 81 Bytes, wenn die nächstlängste Antwort 48 Bytes ist ... seufz . Nun, ich werde dieses Golfspiel so oft wie möglich ausprobieren, aber Golftipps werden immer noch sehr geschätzt.
Auch hier ist die kürzeste Lösung, die ich in Python 2 mit 86 Bytes bekommen konnte :
Offenbar in Python 2,
[*...]
kehrt einSyntax Error
, und dapermutations
kehrtitertools.permutations object at 0x...
der nächste kürzeste Weg (die ich kenne) die Extraktions einzigartigen Permutationen verwendet ,{''.join(i)for i in permutations(f)}
wof
ist die Eingabezeichenfolge.Beachten Sie abschließend, dass dies beide Lambda-Funktionen sind und daher im Format aufgerufen werden müssen
print(<Function Name>(<Input String>))
.quelle
Mathematica,
3423 BytesDie Eingabe muss eine Liste von Zeichen sein.
Erläuterung
Hier finden Sie alle Permutationen der Eingabe, sortiert und duplikationsfrei.
Drucken Sie sie einzeln aus.
quelle
Brachylog , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
Perl 6 ,
4944 BytesString als Eingabe
Liste der Zeichen als Eingabe
Erweitert
quelle
#perl6
Kanal freenode.net ausführt .».say
anstelle von.map: *.put
».say
ist es erlaubt, sie in beliebiger Reihenfolge auszuführen , und zu einem Zeitpunkt wurde dies absichtlich nicht in der richtigen Reihenfolge ausgeführt.Brachylog (v2), 5 Bytes
Probieren Sie es online!
Finden
ᵘ
niquep
ermutations der Eingabe, so
rt sie,ᵐ
apẉ
riteln (Schreiben mit Newline) über das Array.quelle
Python 3,
77-85BytesJetzt sortiert!
quelle
from itertools import*
im Gegensatz zuimport itertools as i
. Sie wäre in der Lage , ein Byte durch den Ersatz speicherni.permutations
durchpermutations
.{*...}
stattset(...)
sparen Sie zwei weitere Bytes.PowerShell v3 +, 171 Byte
In PowerShell v3 wurde das
-Unique
Flag für dasSort-Object
Cmdlet eingeführt, sodass es einige Bytes kürzer ist als die Version unter v2, da dies nicht erforderlich istSelect
.v2 version, 178 bytes:
In PowerShell sind keine Permutationen integriert, daher habe ich meinen Code von Prime Factors Buddies ausgeliehen und ihn für die Verwendung hier leicht optimiert.
Dies sind im Wesentlichen drei Teile, auf die ich im Folgenden näher eingehen werde.
param([char[]]$x)$a,$b=$x;$a=,$a
Nimmt Eingaben auf$x
,char
wandelt sie als -array um, entfernt den ersten Buchstaben$a
und den Rest$b
und setzt sie dann$a
mit dem Komma-Operator als Array um.while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}
Durchläuft die verbleibenden Buchstaben ($b
), wobei jede Iteration den nächsten Buchstaben aufnimmt$z
und in die verbleibenden Buchstaben speichert und diese$b
dann in einem Array auf$a
das Ergebnis des Sendens$a
in einer eigenen Schleife verkettet - jedes Element von$a
(temporär gespeichert in$c
) wird durchlaufen seine eigene.length
, und dann$z
wird in jeder Position eingefügt, einschließlich Voranstellen und Anhängen mit$z$c
und$c$z
. Zum Beispiel für$c = '12'
und$z = '3'
wird dies dazu führen ,'132','312','123'
in wird verketteten zurück$a
.Der letzte Teil
$a|?{$_.length-eq$x.count}|select -u|sort
nimmt jedes Element von$a
und verwendet eineWhere-Object
Klausel, um nur diejenigen herauszufiltern, die die gleiche Länge wie die Eingabezeichenfolge haben, dannselect
nur die-u
Nique-Elemente und schließlichsort
diese alphabetisch. Die resultierenden Zeichenfolgen verbleiben alle in der Pipeline und werden implizitWrite-Output
nach Programmabschluss ausgegeben .quelle
|select -u|sort
zu|sort -u
. Ziemlich sicher, dass 2.0 das nicht hat.JavaScript (ES6), 119 Byte
Wobei
\n
das wörtliche Zeilenumbruchzeichen darstellt. Die Antwort von Port of @ ETHproduction, Strings anstelle von Arrays zu verwenden. Das Umkehren der Ausgabe oder das Verschieben der nachgestellten Zeile an den Anfang spart 3 Bytes.quelle
R, 113 Bytes
Liest die Eingabe von stdin. Es
permute
wird davon ausgegangen, dass das Paket installiert ist, um dieallPerms
Funktion aufzurufen .Füge eine Erklärung hinzu, wenn ich von der Arbeit nach Hause komme.
quelle
Java
302300 BytesUngolfed & Testcode:
Probieren Sie es hier aus.
Eingang: Test
Ausgang:
quelle
Schläger 82 Bytes
Ungolfed:
Testen:
Ausgang:
quelle
Groovy, 69 Bytes
quelle
Ruby, 51 Bytes
quelle
puts s.chars.permutation().map(&:join).uniq
43 Bytes
ohne vorherige Definition nicht darauf verweisen .Eigentlich 8 Bytes
Golfvorschläge willkommen! Probieren Sie es online!
Ungolfing
quelle
Pip , 8 Bytes
7 Byte Code, +1 für
-n
Flag.Nimmt eine Zeichenfolge als Befehlszeilenargument. Probieren Sie es online!
Pips Scanner zerlegt Serien von Großbuchstaben in Zwei-Buchstaben-Blöcke. Dieser Code ist also
SS UQ PM a
--ieSortString(UniQue(PerMutations(a)))
, wobeia
es sich um das Befehlszeilenargument handelt. Das-n
Flag stellt sicher, dass die Ergebnisliste durch Zeilenumbrüche getrennt ist. Das ist alles dazu.quelle
K (oK) , 14 Bytes
Lösung:
Probieren Sie es online!
Erläuterung:
Verwenden Sie die integrierte Permutationsfunktion,
prm
um Permutationen der Länge der Eingabe zu generieren, wenden Sie diese Permutationen auf die Eingabe an, sortieren Sie sie alphabetisch und nehmen Sie dann unterschiedliche Werte an.quelle
Perl 5
-MList::Util=uniq -F
, 68 BytesProbieren Sie es online!
quelle
Japt v2.0a0
-R
, 5 BytesVersuch es
quelle
û
ist die Center-Pas-Methode; Ich denke du meintestn
;)sort
die Suchleiste in Ihrem Dolmetscher eingefügt und auf die erste geklickt, die ich gefunden habe. Aberá
scheint jede Permutation bereits in alphabetischer Reihenfolge zu gebenü
. Ich werde es morgen reparieren. Die Permutationen von "Buzz" werden zufällig sortiert, weil das Wort selbst lautet - versuchen Sie es beispielsweise mit "zzub".n
(es ist einfacher zu tippen)C ++ (gcc) ,
132128 BytesProbieren Sie es online!
quelle
Muschel , 9 Bytes
Erläuterung
quelle