PowerShell v3 +, 171 bajtów
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
Program PowerShell v3 wprowadził -Uniqueflagę w Sort-Objectcmdletu, więc jest o kilka bajtów krótszy niż wersja v2 poniżej, ponieważ nie musimy tego robić Selectnajpierw.
wersja v2, 178 bajtów:
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
PowerShell nie ma żadnych wbudowanych permutacji, więc pożyczyłem swój kod od znajomych Factor i nieco go poprawiłem, aby używał go tutaj.
To w zasadzie trzy części, które rozwinę poniżej.
param([char[]]$x)$a,$b=$x;$a=,$aPobiera dane wejściowe $x, rzuca je jako chartablicę, usuwa pierwszą literę do, $aa resztę do $b, a następnie przekształca $ajako tablicę z operatorem przecinkowym.
while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}Pętle przechodzą przez pozostałe litery ( $b), każda iteracja bierze kolejną literę i przechowuje ją do $zpozostałych $b, a następnie pozostawia w , a następnie konkatenuje tablicę $az wynikiem wysłania $aprzez własną pętlę - każdy element $a(tymczasowo przechowywany w $c) jest zapętlany jest własny .length, a następnie $zjest wstawiany w każdą pozycję, w tym poprzedzanie i dołączanie za pomocą $z$ci $c$z. Na przykład dla $c = '12'i $z = '3'spowoduje '132','312','123'to powrót do konkatenacji $a.
Ostatnia część $a|?{$_.length-eq$x.count}|select -u|sortbierze każdy element $ai używa Where-Objectklauzuli, aby odfiltrować tylko te, które mają taką samą długość jak łańcuch wejściowy, a następnie selects tylko -udrobne elementy, a na końcu sortte alfabetycznie. Wynikowe ciągi znaków są pozostawione w potoku, a dane wyjściowe za pośrednictwem niejawnego mają Write-Outputmiejsce po zakończeniu programu.
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"]?