निर्देशिका संरचना आलेखीय वृक्षारोपण


9

एक शास्त्रीय निर्देशिका संरचना को इस तरह बदलें:

config.yml
drafts
    begin-with-the-crazy-ideas.textile
    on-simplicity-in-technology.markdown
includes
    footer.html
    header.html

इस मामले में

.
├── config.yml
├── drafts
|   ├── begin-with-the-crazy-ideas.textile
|   └── on-simplicity-in-technology.markdown
└── includes
    ├── footer.html
    └── header.html
  • चार रिक्त स्थान उपरोक्त डायर का एक नेस्टेड फ़ोल्डर या फ़ाइल निर्दिष्ट करते हैं।
  • अनुमत श्रेणियों का स्तर अलग-अलग हो सकता है।

अपडेट करें

  • फ़ाइल नाम : वैध लिनक्स रिक्त स्थान और linefeeds बिना बदल दें: किसी भी बाइट को छोड़कर NUL, /और spaces,linefeeds
  • ड्राइंग वर्ण:
    • | ऊर्ध्वाधर रेखा (U + 007C)
    • बॉक्स चित्र प्रकाश क्षैतिज (U + 2500)
    • बॉक्स आरेखण प्रकाश ऊर्ध्वाधर और दाईं ओर (U + 251C)

विजेता : बाइट्स में सबसे छोटा कोड जीतता है!


1
PPCG में आपका स्वागत है! अच्छी पहली पोस्ट!
R

क्या ऊर्ध्वाधर रेखाओं को माना जाता है कि \ x7C वर्टिकल लाइन या \ u2502 बॉक्स ड्रॉइंग लाइट वर्टिकल है?
नील

@ नील मुझे "बॉक्स ड्रॉइंग लाइट वर्टिकल" के बारे में पता नहीं था, मैंने उदाहरण में "वर्टिकल लाइन" का उपयोग किया है और इसके साथ पहले से ही दो उत्तर हैं। वैसे भी पहले वाले का उपयोग करने के लिए अधिक समझदारी होगी क्योंकि अन्य दो अक्षर बॉक्स ड्रॉइंग प्रकार हैं, क्या मुझे प्रश्न को \ u2502 से अपडेट करना चाहिए?
मर्क्यूनी जूल

चूँकि मैं आसानी से अपनी पसंद के REPL में बॉक्स ड्रॉइंग कैरेक्टर टाइप नहीं कर सकता, इसलिए मैंने L, + और - कैरेक्टर्स का उपयोग करके अपना उत्तर लिखा और फिर स्कोर को समायोजित करते हुए यह विश्वास किया कि आप बॉक्स ड्रॉइंग कैरेक्टर्स का उपयोग कर रहे थे, हालाँकि मुझे वास्तव में कॉपी किया गया था और बिना जाँच किए आपके प्रश्न से चिपकाया गया। यदि ऊर्ध्वाधर रेखा स्वीकार्य है, तो मैं अपने स्कोर को
नील

1
बहुत बढ़िया, क्योंकि यह अब मेरे नए जवाब पर मेरे 2 बाइट बचाता है!
नील

जवाबों:


2

रेटिना , 88 बाइट्स

m`^ *
$&├── 
 {4}
|   
T+`|├` └`(?<=(.)*).(?!.+¶(?>(?<-1>.)*)[|├└])
^
.¶

इसे ऑनलाइन आज़माएं!

मुझे लगता है मैं तकनीकी रूप से, कुछ अक्षर बाहर गमागमन आईएसओ 8859-1 के रूप में स्रोत पढ़ने और फिर उत्पादन जो होता है के लिए एक एकल-बाइट एन्कोडिंग का पता लगाकर चरित्र प्रति एक बाइट के रूप में इस गिनती कर सकता है लगता है और , लेकिन मैं काम करने के लिए परेशान नहीं किया जा सकता है अभी विवरण बाहर है। (रिकॉर्ड के लिए, यह 72 बाइट्स होगा।)

व्याख्या

चरण 1: प्रतिस्थापन

m`^ *
$&├── 

हम प्रत्येक पंक्ति पर इंडेंटेशन मिलान करके और सम्मिलित करके शुरू करते हैं ├──

चरण 2: प्रतिस्थापन

 {4}
|   

अगला, हम 4 स्थानों के प्रत्येक समूह से मेल खाते हैं और पहले को एक से बदल देते हैं |। अब सभी को ठीक करने की ज़रूरत है |कि आउटपुट के निचले भाग पर जाएं और यह होना चाहिए । उन दोनों मामलों को पहचाना जा सकता है जिन्हें हम संभावित रूप से बदलना चाहते हैं।

चरण 3: लिप्यंतरण

T+`|├` └`(?<=(.)*).(?!.+¶(?>(?<-1>.)*)[|├└])

यह (?<=(.)*)गणना करता है कि क्षैतिज स्थिति को मापने के लिए वर्तमान लाइन पर कितने वर्ण मैच से पहले हैं। तब लुकहेड अगली पंक्ति के साथ स्काइप करता है .+¶, जितने भी अक्षर हैं, हम एक ही क्षैतिज स्थिति (जैसे क्षैतिज स्थिति में आगे बढ़ना) के 1साथ समूह में मेल खाते हैं (?>(?<-1>.)*)और फिर जांचते हैं कि क्या अगला चरित्र (यानी वास्तविक मैच के नीचे वाला) एक में से एक है |├└। यदि ऐसा है, तो मैच विफल हो जाता है, और अन्य सभी मामलों में यह सफल होता है और मंच स्थान के लिए |और इसके लिए स्थानापन्न करता है

यह सभी वर्णों को एक रन में ठीक नहीं करेगा, इसलिए हम इस चरण को +विकल्प के साथ बार-बार लागू करते हैं जब तक कि आउटपुट बदलना बंद न हो जाए।

चरण 4: प्रतिस्थापन

^
.¶

जो कुछ बचा है वह पहली पंक्ति है, इसलिए हम केवल स्ट्रिंग की शुरुआत से मेल खाते हैं और ए .और एक लाइनफीड प्रीपेंड करते हैं ।


कृपया स्पष्टीकरण दें?
नील

@ नील तुम वहाँ जाओ।
मार्टिन एंडर

क्या यह +`(?<=(.*))\|(?!.+¶\1[|├])(स्थान) उपयोग करने में मदद करेगा +`(?<=(.*))├(?!.+¶\1[│├└]) ?
नील

@ नील मैंने ऐसा कुछ करने की कोशिश की, लेकिन मुझे नहीं लगता कि मैं इसके साथ बाइट्स को बचाने में कामयाब रहा।
मार्टिन एंडर

नया विचार:m`^ * $&└── T+` └`|├`(?<=(.*)).(?=.+¶\1[|└])
नील

2

जावास्क्रिप्ट (ईएस 6), 237 128 बाइट्स

f=(s,r=`.\n`+s.replace(/^ */gm,"$&└── "),q=r.replace(/^(.*)( |└)(?=.+\n\1[|└])/m,(_,i,j)=>i+`|├`[+(j>' ')]))=>q==r?r:f(s,q)

जहां \nशाब्दिक न्यूलाइन चरित्र का प्रतिनिधित्व करता है। स्पष्टीकरण: लाइन को तैयार करने और प्रत्येक पंक्ति के इंडेंट के अंत में डालने rसे बनाया गया sहै । यह अब इनपुट की अंतिम पंक्ति के लिए सही है, लेकिन प्रत्येक को यथासंभव "ऊपर" बढ़ाया जाना चाहिए। यह काम है , जो खोजता है और पुन: इसके लिए रिक्त स्थान को सीधे एस के साथ बदल देता है जब तक कि यह दूसरे तक नहीं पहुंचता है जो बदले में बदल जाता है । जब कोई और प्रतिस्थापन नहीं किया जा सकता है तो पुनरावृत्ति समाप्त हो जाती है। ध्यान दें कि यदि ऊपर का वर्ण एक स्थान है या फिर बाईं ओर का पाठ हमेशा पिछली पंक्ति के समान ही होता है, तो मैं अभी उपयोग कर सकता हूं.└──q|\1 परीक्षण करने के लिए कि एक वर्ण दूसरे से ऊपर है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.