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 đã giới thiệu -Unique
cờ trênSort-Object
lệnh ghép ngắn, do đó, nó ngắn hơn một vài byte so với phiên bản v2 dưới đây, vì Select
trước tiên chúng ta không cần .
phiên bản 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 không có bất kỳ hoán vị tích hợp nào, vì vậy tôi đã mượn mã của mình từ Prime Factors Buddies và điều chỉnh một chút để sử dụng ở đây.
Đây thực chất là ba phần, tôi sẽ mở rộng bên dưới.
param([char[]]$x)$a,$b=$x;$a=,$a
Đưa đầu vào $x
, biến nó thành một char
-array, loại bỏ chữ cái đầu tiên $a
và phần còn lại vào $b
, sau đó tái diễn $a
thành một mảng với toán tử dấu phẩy.
while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}
Các vòng lặp thông qua các chữ cái còn lại ( $b
), mỗi lần lặp lấy chữ cái tiếp theo và lưu nó vào $z
và để lại phần còn lại $b
, sau đó nối $a
chuỗi vào kết quả gửi $a
qua vòng lặp của chính nó - mỗi mục của $a
(được lưu trữ tạm thời $c
) được lặp lại riêng của nó .length
, và sau đó $z
được chèn vào mọi vị trí, bao gồm cả chuẩn bị và nối thêm $z$c
và $c$z
. Ví dụ, cho $c = '12'
và $z = '3'
, điều này sẽ dẫn đến'132','312','123'
việc được nối lại thành $a
.
Phần cuối cùng $a|?{$_.length-eq$x.count}|select -u|sort
lấy từng phần tử $a
và sử dụng Where-Object
mệnh đề để chỉ lọc ra những phần tử có cùng độ dài với chuỗi đầu vào, sau đó select
chỉ các -u
mục nique và cuối cùng sort
là các phần tử theo thứ tự bảng chữ cái. Các chuỗi kết quả là tất cả còn lại trên đường ống và đầu ra thông qua ngầm Write-Output
xảy ra khi hoàn thành chương trình.
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"]
?