m`^ *
$&├──
{4}
|
T+`|├` └`(?<=(.)*).(?!.+¶(?>(?<-1>.)*)[|├└])
^
.¶
इसे ऑनलाइन आज़माएं!
मुझे लगता है मैं तकनीकी रूप से, कुछ अक्षर बाहर गमागमन आईएसओ 8859-1 के रूप में स्रोत पढ़ने और फिर उत्पादन जो होता है के लिए एक एकल-बाइट एन्कोडिंग का पता लगाकर चरित्र प्रति एक बाइट के रूप में इस गिनती कर सकता है लगता है ├और └, लेकिन मैं काम करने के लिए परेशान नहीं किया जा सकता है अभी विवरण बाहर है। (रिकॉर्ड के लिए, यह 72 बाइट्स होगा।)
व्याख्या
चरण 1: प्रतिस्थापन
m`^ *
$&├──
हम प्रत्येक पंक्ति पर इंडेंटेशन मिलान करके और सम्मिलित करके शुरू करते हैं ├──।
चरण 2: प्रतिस्थापन
{4}
|
अगला, हम 4 स्थानों के प्रत्येक समूह से मेल खाते हैं और पहले को एक से बदल देते हैं |। अब सभी को ठीक करने की ज़रूरत है |कि आउटपुट के निचले भाग पर जाएं और ├यह होना चाहिए └। उन दोनों मामलों को पहचाना जा सकता है जिन्हें हम संभावित रूप से बदलना चाहते हैं।
चरण 3: लिप्यंतरण
T+`|├` └`(?<=(.)*).(?!.+¶(?>(?<-1>.)*)[|├└])
यह (?<=(.)*)गणना करता है कि क्षैतिज स्थिति को मापने के लिए वर्तमान लाइन पर कितने वर्ण मैच से पहले हैं। तब लुकहेड अगली पंक्ति के साथ स्काइप करता है .+¶, जितने भी अक्षर हैं, हम एक ही क्षैतिज स्थिति (जैसे क्षैतिज स्थिति में आगे बढ़ना) के 1साथ समूह में मेल खाते हैं (?>(?<-1>.)*)और फिर जांचते हैं कि क्या अगला चरित्र (यानी वास्तविक मैच के नीचे वाला) एक में से एक है |├└। यदि ऐसा है, तो मैच विफल हो जाता है, और अन्य सभी मामलों में यह सफल होता है और मंच स्थान के लिए |और इसके └लिए स्थानापन्न करता है ├।
यह सभी वर्णों को एक रन में ठीक नहीं करेगा, इसलिए हम इस चरण को +विकल्प के साथ बार-बार लागू करते हैं जब तक कि आउटपुट बदलना बंद न हो जाए।
चरण 4: प्रतिस्थापन
^
.¶
जो कुछ बचा है वह पहली पंक्ति है, इसलिए हम केवल स्ट्रिंग की शुरुआत से मेल खाते हैं और ए .और एक लाइनफीड प्रीपेंड करते हैं ।