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
предложение, чтобы отфильтровать только те, которые имеют ту же длину, что и входная строка, затем select
s только -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"]
?