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 -Uniquecờ 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ì Selecttrướ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 $avà phần còn lại vào $b, sau đó tái diễn $athà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 $zvà để lại phần còn lại $b, sau đó nối $achuỗi vào kết quả gửi $aqua 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$cvà $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|sortlấy từng phần tử $avà sử dụng Where-Objectmệnh đề để chỉ lọc ra những phần tử có cùng độ dài với chuỗi đầu vào, sau đó selectchỉ các -umục nique và cuối cùng sortlà 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-Outputxả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"]?