PowerShell v3 +, 171 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}|sort -u
O PowerShell v3 apresentou o -Unique sinalizador no Sort-Objectcmdlet, por isso é alguns bytes menor que a versão v2 abaixo, pois não precisamos Selectprimeiro.
versão v2, 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
O PowerShell não possui permutações internas; portanto, emprestei meu código de Prime Factors Buddies e o ajustei levemente para uso aqui.
São essencialmente três porções, as quais expandirei abaixo.
param([char[]]$x)$a,$b=$x;$a=,$aRecebe entrada $x, lança como charmatriz, retira a primeira letra $ae o restante para $be depois reformula$a como uma matriz com o operador de vírgula.
while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}Faz um loop pelas letras restantes ( $b), cada iteração pega a próxima letra e armazena $ze deixa a restante $b, concatenando a matriz no $aresultado do envio $aatravés de seu próprio loop - cada item de $a(armazenado temporariamente $c) é repetido próprio .lengthe, em seguida, $zé inserido em todas as posições, incluindo anexos e anexos com $z$ce $c$z. Por exemplo, para $c = '12'e $z = '3', isso resultará na '132','312','123'concatenação de volta ao$a .
A parte final $a|?{$_.length-eq$x.count}|select -u|sortpega cada elemento de $ae usa a Where-Objectcláusula para filtrar apenas aqueles que têm o mesmo comprimento que a sequência de entrada, depois selectapenas os -uitens específicos e finalmente sortos alfabéticos. As seqüências resultantes são todas deixadas no pipeline e a saída via implícita Write-Outputacontece na conclusão do programa.
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"]?