PowerShell v3 +, 171 байт
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
PowerShell v3 ввел -Uniqueфлаг в Sort-Objectкомандлет, поэтому он на несколько байтов короче, чем в версии v2 ниже, так как нам не нужно Selectсначала.
версия v2, 178 байт:
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 не имеет встроенных перестановок, поэтому я позаимствовал мой код у Prime Factors Buddies и немного подправил его для использования здесь.
По сути, это три части, которые я расскажу ниже.
param([char[]]$x)$a,$b=$x;$a=,$aПринимает данные $x, charпреобразует их как -array, удаляет первую букву, $aа остальные - $b, а затем преобразует $aв массив с запятой-оператором.
while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}Перебирает оставшиеся буквы ( $b), каждая итерация берет следующую букву и сохраняет ее $zи оставляет в ней $b, затем объединяет массив $aв результат отправки $aчерез свой собственный цикл - каждый элемент $a(временно сохраненный в $c) зацикливается его собственный .length, а затем $zвставляется в каждую позицию, включая добавление и добавление с помощью $z$cи $c$z. Например, для $c = '12'и $z = '3', это приведет '132','312','123'к объединению обратно в $a.
Последняя часть $a|?{$_.length-eq$x.count}|select -u|sortберет каждый элемент $aи использует Where-Objectпредложение, чтобы отфильтровать только те, которые имеют ту же длину, что и входная строка, затем selects только -uуникальные элементы и, наконец, sortте в алфавитном порядке. Все полученные строки остаются в конвейере, а вывод через неявный Write-Outputпроисходит при завершении программы.
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"]?