यह मेरा सिर है:
\ /-- -|
/ -\ | | |
\ \ \ \ |
--\ | \ | |
/ |--| / / |
/|- //--| / |
| | || //\ |
| \ /| // \ |
इसमें ठीक आठ बाल होते हैं। मेरे बाल बहुत लंबे हैं। कृपया मेरे द्वारा निर्दिष्ट प्रत्येक व्यक्ति स्ट्रैंड को काट लें।
इनपुट
इस खंड में मुख्य आकर्षण बाल का वास्तविक सिर है। यहाँ एक ग्राफिकल, रंग-कोडित प्रतिनिधित्व, एक एनीमेशन के साथ , आलसी के लिए है:

और यहाँ एक पूर्ण विनिर्देश है कि बालों का एक सेट क्या है:
- व्यक्तिगत बाल, जो हम कहते हैं किस्में , से बाहर किया जाएगा
/,\,|, और-ASCII वर्ण, आगे से के रूप में जाना परमाणुओं । - सुनने का पूरा सिर (सभी संयुक्त किस्में) पंक्तियों
cद्वारा कॉलम होगाr, जहां ofc1 और (r2। - प्रत्येक कतरा होगा ...
- सिर की अंतिम पंक्ति (पंक्ति
r- 1) पर शुरू करें। - लंबाई
lजहांl≥ 2 है।
- सिर की अंतिम पंक्ति (पंक्ति
- निम्नलिखित विधि से स्ट्रैंड को पार्स किया जा सकता है:
- स्ट्रैंड के नीचे शुरू करें। यह एक
/,|या\परमाणु होगा, जिसे हम रूट कहेंगे । (स्ट्रैंट्स को रूट द्वारा आदेशित बायें से दायें पार्स किया जाता है।) - उस परमाणु को खोजें जो जड़ की ओर इंगित करता है।
- एक
|परमाणु ऊपर और नीचे इंगित करता है। एक-परमाणु बाएं और दाएं इंगित करता है (लेकिन कभी भी जड़ को इंगित नहीं कर सकता है क्योंकि केवल जड़ें नीचे पंक्ति में हो सकती हैं)। एक/परमाणु बाएं-दाएं और ऊपर-दाएं इंगित करता है, और एक\करता है परमाणु विपरीत करता है। - हमेशा एक परमाणु होगा जो मूल परमाणु की ओर इंगित करता है।
- एक
- एक अप्रयुक्त खोजें परमाणु (वह जो किसी स्ट्रैंड का अभी तक हिस्सा नहीं है) खोजें जो इस परमाणु की ओर इंगित करता है और इस परमाणु के नीचे भी नहीं है (बाल नीचे की ओर नहीं बढ़ सकते हैं, लेकिन बग़ल में ठीक है)।
- यदि शून्य हैं, तो आप स्ट्रैंड के अंत तक पहुंच गए हैं!
- यदि एक है, तो यह स्ट्रैंड का अगला परमाणु है। इस परमाणु के साथ चरण 3 को दोहराएं। (यह परमाणु अब चरण 3 के प्रयोजनों के लिए "उपयोग" के रूप में चिह्नित है, क्योंकि यह एक स्ट्रैंड का हिस्सा है।)
- सिर के किसी भी बिंदु पर यहां कई अप्रयुक्त परमाणु नहीं होंगे ।
- स्ट्रैंड के नीचे शुरू करें। यह एक
इनपुट प्रारूप हो जाएगा:
- बालों का एक सिर। के रूप में इनपुट किया जा सकता है (शाब्दिक newlines के साथ बहुस्तरीय इनपुट), या newlines के स्थान पर अपनी पसंद का सीमांकक के साथ। ध्यान दें कि सिर हमेशा एक आयत होगा; यानी अनुगामी व्हाट्सएप को आवश्यक रूप से जोड़ा जाएगा (दाईं ओर अजीब सीधी रेखा के बाल भ्रम से बचने के लिए अतिरिक्त अनुगामी व्हाट्सएप को खत्म करना है)।
- एक नंबर spec 1 निर्दिष्ट करता है कि कितने बाल काटने हैं। इसका वर्णन अगले भाग में विस्तार से किया जाएगा।
आप किसी फ़ंक्शन के लिए इनपुट स्वीकार कर सकते हैं, STDIN / STDOUT का उपयोग कर सकते हैं, आदि (कुछ भी उचित) )।
उत्पादन
आपका आउटपुट बालों के सिर पर लागू बाल कटवाने के साथ होगा। एक बाल कटवाने के लिए, बालों की प्रत्येक स्ट्रैंड की लंबाई को निर्धारित मात्रा से कम करें (जो हमेशा 1 या अधिक होगी), बालों की छोर से जड़ की ओर बढ़ते हुए। हालाँकि, हमेशा जड़ को छोड़ दें!
यहाँ एक सरल उदाहरण है। सिर के लिए इनपुट कहो
\
/
|
|
के दूसरे इनपुट के साथ 2, आप स्ट्रैंड से दो परमाणुओं को काटेंगे और परिणाम प्राप्त करेंगे
|
|
और के इनपुट के साथ 42, आउटपुट बस होगा
|
ध्यान दें कि सिर से पहले और बाद में व्हॉट्सएप पूरी तरह से अप्रासंगिक है; आप अतिरिक्त newlines ट्रिम कर सकते हैं या आप अधिक गद्दी जोड़ सकते हैं। इससे कोई फर्क नहीं पड़ता, जब तक कि सिर बरकरार रहता है। (आप व्हॉट्सएप के साथ ही आप जो चाहें कर सकते हैं।)
परीक्षण के मामलों
सभी परीक्षण मामलों के लिए, इस पोस्ट की शुरुआत में प्रस्तुत उदाहरण का उपयोग किया जाएगा।
बाल कटवाने की लंबाई = 1:
/- |
/ \ | |
\ \ \ \ |
--\ | \ | |
/ |-- / / |
|- //--| / |
| | || // |
| \ /| // \ |
3 की लंबाई:
|
\ |
--\ | \ |
/ |-- / / |
|- // | / |
| || // |
| \ /| // \ |
7 की लंबाई:
|- / |
| | / |
| \ /| // \ |
1337 की लंबाई:
| \ /| // \ |
स्कोरिंग
यह कोड-गोल्फ है , इसलिए बाइट्स में सबसे छोटा कोड जीत जाएगा!
-तीसरे स्ट्रैंड में बाएं पॉइंट से बाएं |स्ट्रैंड में, चौथे स्ट्रैंड में लेफ्ट से
-, न कि वह किस ओर इंगित करता है । उदाहरण के लिए, पहले स्ट्रैंड में |इंगित नहीं होता है /, लेकिन यह इसके द्वारा इंगित किया जाता है /। (हां, मुझे पता है कि यह भ्रामक है; मुझे कई बार GIF को फिर से करना पड़ा क्योंकि मैंने खुद को भी भ्रमित किया है!) इसे समझने का एक आसान तरीका सिर्फ दूसरे स्ट्रैंड के शीर्ष पर देखना हो सकता है।
-शामिल होना चाहिए , तीसरे से नहीं।