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
PowerShell v3 memperkenalkan -Uniqueflag pada Sort-Objectcmdlet, jadi beberapa byte lebih pendek dari versi v2 di bawah ini, karena kita tidak perlu Selectterlebih dahulu.
versi v2, 178 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}|select -u|sort
PowerShell tidak memiliki permutasi bawaan, jadi saya meminjam kode saya dari Prime Factors Buddies dan sedikit mengubahnya untuk digunakan di sini.
Ini pada dasarnya adalah tiga bagian, yang akan saya bahas di bawah ini.
param([char[]]$x)$a,$b=$x;$a=,$aMengambil input $x, melemparkannya sebagai char-array, melepas huruf pertama ke dalam $adan sisanya ke dalam $b, dan kemudian menyusun kembali$a sebagai array dengan koma-operator.
while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}Loop melalui huruf-huruf yang tersisa ( $b), setiap iterasi mengambil huruf berikutnya dan menyimpannya ke dalam $zdan meninggalkan sisanya di $b, kemudian array-concatenating ke $ahasil pengiriman $amelalui loop sendiri - setiap item $a(disimpan sementara ke dalam $c) dilingkarkan miliknya sendiri .length, dan kemudian $zdimasukkan ke dalam setiap posisi, termasuk menambahkan dan menambahkan dengan $z$cdan $c$z. Misalnya, untuk $c = '12'dan $z = '3', ini akan mengakibatkan '132','312','123'digabungkan kembali ke $a.
Bagian terakhir $a|?{$_.length-eq$x.count}|select -u|sortmengambil setiap elemen $adan menggunakan Where-Objectklausa untuk menyaring hanya mereka yang memiliki panjang yang sama dengan string input, kemudian selecthanya -uitem unik, dan akhirnya sortadalah mereka berdasarkan abjad. String yang dihasilkan semuanya ditinggalkan di pipa, dan output melalui implisit Write-Outputterjadi pada penyelesaian program.
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"]?