PowerShell v3 +, 171 ไบต์
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ตั้งค่าสถานะบนSort-Objectcmdlet ดังนั้นจึงสั้นกว่ารุ่น v2 ด้านล่างเล็กน้อยเนื่องจากเราไม่จำเป็นต้องใช้Selectก่อน
เวอร์ชัน v2, 178 ไบต์:
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 ไม่มีการเรียงสับเปลี่ยนในตัวดังนั้นฉันยืมรหัสของฉันจากPrime Factors Buddiesและปรับแต่งเล็กน้อยเพื่อใช้ที่นี่
นี่คือส่วนที่สามซึ่งฉันจะขยายด้านล่าง
param([char[]]$x)$a,$b=$x;$a=,$aนำข้อมูลป้อน$x, ปลดเปลื้องมันเป็นchar-array, ตัดตัวอักษรตัวแรกเข้า$aและส่วนที่เหลือเข้าไป$b, จากนั้น recasts $aเป็นอาร์เรย์ที่มีเครื่องหมายจุลภาค - โอเปอเรเตอร์
while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}$bวนซ้ำผ่านตัวอักษรที่เหลือ ( ) การวนซ้ำแต่ละครั้งจะนำตัวอักษรตัวถัดไปแล้วเก็บไว้ใน$zและปล่อยส่วนที่เหลือไว้$bจากนั้นจึงเรียงต่อกันเข้า$aกับผลลัพธ์ของการส่ง$aผ่านลูปของตัวเอง - แต่ละรายการของ$a(เก็บไว้ชั่วคราว$c) ของตัวเอง.lengthแล้ว$zถูกแทรกเข้าไปในทุกตำแหน่งรวมทั้ง prepending และต่อท้ายด้วยและ$z$c $c$zตัวอย่างเช่นสำหรับ$c = '12'และ$z = '3'นี้จะส่งผลให้ถูกตัดแบ่งกลับเข้ามา'132','312','123'$a
ส่วนสุดท้าย$a|?{$_.length-eq$x.count}|select -u|sortใช้องค์ประกอบแต่ละส่วน$aและใช้Where-Objectส่วนคำสั่งเพื่อกรองเฉพาะส่วนที่มีความยาวเท่ากันกับสตริงป้อนเข้าจากนั้นเลือกselectเฉพาะ-uรายการsortที่ไม่ซ้ำกันและสุดท้ายจะเรียงตามลำดับตัวอักษร สตริงผลลัพธ์จะถูกทิ้งไว้บนไพพ์ไลน์และเอาต์พุตผ่านทาง implicit Write-Outputเกิดขึ้นเมื่อโปรแกรมเสร็จสิ้น
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"]หรือไม่