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 ने cmdlet -Unique
पर ध्वज को पेश किया Sort-Object
, इसलिए यह नीचे दिए गए 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 के पास कोई भी अंतर्निहित परमिट नहीं है, इसलिए मैंने प्राइम फैक्टर के दोस्तों से अपना कोड उधार लिया और यहां उपयोग के लिए इसे थोड़ा ट्वीक किया।
यह अनिवार्य रूप से तीन भाग हैं, जिनका मैं नीचे विस्तार करूँगा।
param([char[]]$x)$a,$b=$x;$a=,$a
इनपुट लेता है $x
, इसे एक char
-रे के रूप में रखता है, पहले अक्षर को $a
और बाकी में स्ट्रिप्स करता है $b
, और फिर $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
हर स्थिति में डाला जाता है, जिसमें शामिल है और साथ प्रस्तुत करना $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
उन वर्णानुक्रम में हैं। परिणामी तार सभी पाइप लाइन पर छोड़ दिए जाते हैं, और निहितार्थ के माध्यम से आउटपुट 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"]
?