^
1 N23456
+(` (.)?(\w*6)u
$1 $2
)`(.)? (\w*6)d
$1$2
.* (.).*
$1
उपयोग करता है uऔर dऊपर और नीचे के लिए।
इसे ऑनलाइन आज़माएं!
व्याख्या
यह कार्यक्रम 1N23456निर्देशों के अनुक्रम को पीछे रखकर काम करता है । यह अपने पीछे एक स्थान होने से वर्तमान गियर का ट्रैक रखता है। तब यह एक बार में एक निर्देश लेता है जब तक कि कोई अधिक न हो।
^
1 N23456
1 N23456इनपुट से पहले लगाकर शुरू करें । इससे पहले Nकि अंतरिक्ष इंगित करता है कि Nवर्तमान गियर है।
+(` (.)?(\w*6)u
$1 $2
)`(.)? (\w*6)d
$1$2
ये दो प्रतिस्थापन चरण हैं, जिन्हें एक साथ समूहीकृत किया जाता है और तब तक चलाया जाता है जब तक वे स्ट्रिंग को बदलना बंद नहीं करते हैं:
(.)?(\w*6)u
$1 $2
पहले वाले गियर को ऊपर की ओर शिफ्ट करने का काम करता है। यह अंतरिक्ष के बाद किसी भी संख्या में गियर की तलाश करेगा 6, उसके बाद ए , उसके बाद u( uगियर शिफ्ट करने के निर्देश को इंगित करता है)। यदि 6 से पहले वर्ण थे, तो यह इसके तुरंत बाद वर्ण के साथ स्थान को स्वैप करता है, हटाता है uऔर बाकी स्ट्रिंग अक्षर को छोड़ देता है। चूंकि 6मैच में यह अनिवार्य है, यह केवल पहले किसी भी चरित्र के साथ अंतरिक्ष स्वैप करेगा 6। यह के साथ स्वैप कभी नहीं होगा 6।
(.)? (\w*6)d
$1$2
दूसरा चरण गियर शिफ्टिंग को संभालता है, और इसी तरह काम करता है। यह अंतरिक्ष से पहले एक चरित्र है, तो कुछ अन्य गियर में समाप्त होने के बाद के लिए वैकल्पिक रूप से लग रहा है 6, के बाद d। यह चरित्र के साथ अंतरिक्ष को स्वैप करता है इससे पहले, हटाता है d, और बाकी को बरकरार रखता है। यदि अंतरिक्ष स्ट्रिंग की शुरुआत में था, तो अंतरिक्ष से पहले एक चरित्र के लिए कोई मैच नहीं था, इसलिए कोई स्वैप नहीं होता है।
.* (.).*
$1
उपर्युक्त प्रतिस्थापनों में से कोई भी अब नहीं किया जा सकता है, सभी गियर शिफ्ट पूरे हो गए हैं। अंतरिक्ष के तुरंत बाद गियर को छोड़कर लाइन को सब कुछ साफ कर दिया जाता है। यह अंतिम गियर है।