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-Object
cmdlet, por isso é alguns bytes menor que a versão v2 abaixo, pois não precisamos Select
primeiro.
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=,$a
Recebe entrada $x
, lança como char
matriz, retira a primeira letra $a
e o restante para $b
e 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 $z
e deixa a restante $b
, concatenando a matriz no $a
resultado do envio $a
através de seu próprio loop - cada item de $a
(armazenado temporariamente $c
) é repetido próprio .length
e, em seguida, $z
é inserido em todas as posições, incluindo anexos e anexos com $z$c
e $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|sort
pega cada elemento de $a
e usa a Where-Object
cláusula para filtrar apenas aqueles que têm o mesmo comprimento que a sequência de entrada, depois select
apenas os -u
itens específicos e finalmente sort
os alfabéticos. As seqüências resultantes são todas deixadas no pipeline e a saída via implícita Write-Output
acontece 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"]
?