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
PowerShell v3 introdujo el -Uniqueindicador en el Sort-Objectcmdlet, por lo que es unos pocos bytes más corto que la versión v2 a continuación, ya que no necesitamos Selectprimero.
Versión 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
PowerShell no tiene permutaciones integradas, por lo que tomé prestado mi código de Prime Factors Buddies y lo modifiqué ligeramente para usarlo aquí.
Esto es esencialmente tres porciones, que ampliaré a continuación.
param([char[]]$x)$a,$b=$x;$a=,$aToma la entrada $x, la charconvierte como una matriz, elimina la primera letra $ay el resto $b, y luego la vuelve a proyectar $acomo una matriz con el operador de coma.
while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}Recorre las letras restantes ( $b), cada iteración toma la siguiente letra y la almacena $zy la deja dentro $b, luego concatena la matriz en $ael resultado del envío$a través de su propio bucle: cada elemento de $a(almacenado temporalmente $c) se repite propio .length, y luego $zse inserta en cada posición, incluso anteponer y anexar con $z$cy $c$z. Por ejemplo, para $c = '12'y $z = '3', esto dará como resultado que '132','312','123'se concatenen nuevamente $a.
La parte final $a|?{$_.length-eq$x.count}|select -u|sorttoma cada elemento de $ay usa la Where-Objectcláusula para filtrar solo aquellos que tienen la misma longitud que la cadena de entrada, luegoselect solo los -uelementos nique y finalmente sortlos alfabéticamente. Todas las cadenas resultantes se dejan en la tubería, y la salida a través de lo implícito Write-Outputocurre al finalizar el 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"]?