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 -Unique
drapeau 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 Select
commencer.
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=,$a
Prend l'entrée $x
, la char
transforme en tableau, supprime la première lettre $a
et le reste $b
, puis la refonte $a
sous 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 $z
et en laissant le reste $b
, puis concaténant le tableau sur $a
le résultat de l'envoi $a
via sa propre boucle - chaque élément de $a
(temporairement stocké dans $c
) est bouclé son propre .length
, puis $z
est inséré dans chaque position, y compris pré-ajout et ajout avec $z$c
et $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|sort
prend chaque élément $a
et utilise la Where-Object
clause pour filtrer uniquement ceux qui ont la même longueur que la chaîne d'entrée, puis select
s uniquement les -u
éléments niques et enfin sort
s ceux par ordre alphabétique. Les chaînes résultantes sont toutes laissées sur le pipeline, et la sortie via implicite Write-Output
se 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 ?