PowerShell v3 +, 171 bayt
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
bayrağı cmdlet'te tanıttı Sort-Object
, bu yüzden Select
ilk v2 sürümünden birkaç bayt daha kısa, çünkü ilk önce gerekmiyor .
v2 sürümü, 178 bayt:
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'de yerleşik izinler yok, bu yüzden kodumu Prime Factors Buddies'ten ödünç aldım ve burada kullanmak için hafifçe çimdikledim.
Bu, temelde aşağıda genişleyeceğim üç bölümdür.
param([char[]]$x)$a,$b=$x;$a=,$a
Girdiyi alır $x
, bir char
dizi olarak atar , ilk harfi çıkarır $a
ve geri kalanını çıkarır $b
ve sonra $a
virgül operatörüyle birlikte bir dizi olarak okunur .
while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}
Kalan harflerin ( $b
) ilmekleri, her bir sonraki mektubu alan ve $z
kalanları içine alan ve kalanları bırakan her bir yineleme $b
, sonradan kendi döngüsünden $a
gönderme sonucu üzerine birleştirme yapar $a
- $a
(geçici olarak depolanan $c
) öğelerinin her biri üzerinden çevrilir. kendi .length
sonra ve $z
prepending ile ekleme dahil her pozisyonda, içine yerleştirilir $z$c
ve $c$z
. Örneğin, $c = '12'
ve için $z = '3'
bu, '132','312','123'
yeniden bir araya getirilmesine neden olacaktır $a
.
Son bölüm $a|?{$_.length-eq$x.count}|select -u|sort
, her öğeyi alır $a
ve Where-Object
yalnızca girdi dizesiyle aynı uzunluğa sahip olanları filtrelemek için yan tümce öğelerini kullanır , ardından select
yalnızca -u
nique öğelerini ve son olarak da sort
alfabetik olarak öğelerini siler . Sonuçta ortaya çıkan dizgilerin tümü boru hattında bırakılır ve örtülü yoluyla çıktı Write-Output
program tamamlandığında gerçekleşir.
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"]
mi?