PowerShell v3 +, 171 octets
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 a introduit le -Uniquedrapeau sur leSort-Object applet de commande, il est donc plus court de quelques octets que la version v2 ci-dessous, car nous n'avons pas besoin de Selectcommencer.
version v2, 178 octets:
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 n'a pas de permutations intégrées, j'ai donc emprunté mon code à Prime Factors Buddies et l' ai légèrement modifié pour l'utiliser ici.
Il s'agit essentiellement de trois parties, que je développerai ci-dessous.
param([char[]]$x)$a,$b=$x;$a=,$aPrend l'entrée $x, la chartransforme en tableau, supprime la première lettre $aet le reste $b, puis la refonte $asous forme de tableau avec l'opérateur virgule.
while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}Boucle à travers les lettres restantes ( $b), chaque itération prenant la lettre suivante et la stockant dans $zet en laissant le reste $b, puis concaténant le tableau sur $ale résultat de l'envoi $avia sa propre boucle - chaque élément de $a(temporairement stocké dans $c) est bouclé son propre .length, puis $zest inséré dans chaque position, y compris pré-ajout et ajout avec $z$cet $c$z. Par exemple, pour $c = '12'et $z = '3', cela se traduira par '132','312','123'une nouvelle concaténation dans $a.
La dernière partie $a|?{$_.length-eq$x.count}|select -u|sortprend chaque élément $aet utilise la Where-Objectclause pour filtrer uniquement ceux qui ont la même longueur que la chaîne d'entrée, puis selects uniquement les -uéléments niques et enfin sorts ceux par ordre alphabétique. Les chaînes résultantes sont toutes laissées sur le pipeline, et la sortie via implicite Write-Outputse produit à la fin du programme.
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"]-il être ?