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-Objectcmdlet, тому він на кілька байтів коротший, ніж нижченаведена версія 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передає його як- масив, знімає першу букву в, $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 лише -unique елементи і, нарешті, sorts в алфавітному порядку. Отримані рядки залишаються на конвеєрі, а вихід через неявні 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"]?