PowerShell v3 +, 171 Byte
param([char[]]$x)$a,$b=$x;$a=,$a;while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}$a|?{$_.length-eq$x.count}|sort -u
In PowerShell v3 wurde das -UniqueFlag für das Sort-ObjectCmdlet eingeführt, sodass es einige Bytes kürzer ist als die Version unter v2, da dies nicht erforderlich ist Select.
v2 version, 178 bytes:
param([char[]]$x)$a,$b=$x;$a=,$a;while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}$a|?{$_.length-eq$x.count}|select -u|sort
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=,$aNimmt Eingaben auf $x, charwandelt sie als -array um, entfernt den ersten Buchstaben $aund den Rest $bund setzt sie dann $amit 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 $zund in die verbleibenden Buchstaben speichert und diese $bdann in einem Array auf $adas Ergebnis des Sendens $ain einer eigenen Schleife verkettet - jedes Element von $a(temporär gespeichert in $c) wird durchlaufen seine eigene .length, und dann $zwird in jeder Position eingefügt, einschließlich Voranstellen und Anhängen mit $z$cund $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|sortnimmt jedes Element von $aund verwendet eine Where-ObjectKlausel, um nur diejenigen herauszufiltern, die die gleiche Länge wie die Eingabezeichenfolge haben, dann selectnur die -uNique-Elemente und schließlich sortdiese alphabetisch. Die resultierenden Zeichenfolgen verbleiben alle in der Pipeline und werden implizit Write-Outputnach Programmabschluss ausgegeben .
PS C:\Tools\Scripts\golfing> .\alphabetically-permute-a-string.ps1 'PPCG'
CGPP
CPGP
CPPG
GCPP
GPCP
GPPC
PCGP
PCPG
PGCP
PGPC
PPCG
PPGC
["buzz" "bzuz" "bzzu" "ubzz" "uzbz" "uzzb" "zbuz" "zbzu" "zubz" "zuzb" "zzbu" "zzub"]?