PowerShell v3 +, 171 byte
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 memperkenalkan -Unique
flag pada Sort-Object
cmdlet, jadi beberapa byte lebih pendek dari versi v2 di bawah ini, karena kita tidak perlu Select
terlebih dahulu.
versi v2, 178 byte:
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 tidak memiliki permutasi bawaan, jadi saya meminjam kode saya dari Prime Factors Buddies dan sedikit mengubahnya untuk digunakan di sini.
Ini pada dasarnya adalah tiga bagian, yang akan saya bahas di bawah ini.
param([char[]]$x)$a,$b=$x;$a=,$a
Mengambil input $x
, melemparkannya sebagai char
-array, melepas huruf pertama ke dalam $a
dan sisanya ke dalam $b
, dan kemudian menyusun kembali$a
sebagai array dengan koma-operator.
while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}
Loop melalui huruf-huruf yang tersisa ( $b
), setiap iterasi mengambil huruf berikutnya dan menyimpannya ke dalam $z
dan meninggalkan sisanya di $b
, kemudian array-concatenating ke $a
hasil pengiriman $a
melalui loop sendiri - setiap item $a
(disimpan sementara ke dalam $c
) dilingkarkan miliknya sendiri .length
, dan kemudian $z
dimasukkan ke dalam setiap posisi, termasuk menambahkan dan menambahkan dengan $z$c
dan $c$z
. Misalnya, untuk $c = '12'
dan $z = '3'
, ini akan mengakibatkan '132','312','123'
digabungkan kembali ke $a
.
Bagian terakhir $a|?{$_.length-eq$x.count}|select -u|sort
mengambil setiap elemen $a
dan menggunakan Where-Object
klausa untuk menyaring hanya mereka yang memiliki panjang yang sama dengan string input, kemudian select
hanya -u
item unik, dan akhirnya sort
adalah mereka berdasarkan abjad. String yang dihasilkan semuanya ditinggalkan di pipa, dan output melalui implisit Write-Output
terjadi pada penyelesaian program.
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"]
?