मुझे एक बाल कटवाने दो!


18

यह मेरा सिर है:

\         /-- -|
 /   -\  |  |  |
\      \ \  \  |
 --\    | \  | |
    / |--| / / |
 /|-  //--| /  |
| |  ||   //\  |
| \  /|  //  \ |

इसमें ठीक आठ बाल होते हैं। मेरे बाल बहुत लंबे हैं। कृपया मेरे द्वारा निर्दिष्ट प्रत्येक व्यक्ति स्ट्रैंड को काट लें।

इनपुट

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

रंग कोडित चीज़ एनिमेटेड बात है

और यहाँ एक पूर्ण विनिर्देश है कि बालों का एक सेट क्या है:

  • व्यक्तिगत बाल, जो हम कहते हैं किस्में , से बाहर किया जाएगा /, \, |, और -ASCII वर्ण, आगे से के रूप में जाना परमाणुओं
  • सुनने का पूरा सिर (सभी संयुक्त किस्में) पंक्तियों cद्वारा कॉलम होगा r, जहां of c1 और ( r2।
  • प्रत्येक कतरा होगा ...
    • सिर की अंतिम पंक्ति (पंक्ति r- 1) पर शुरू करें।
    • लंबाई lजहां l≥ 2 है।
  • निम्नलिखित विधि से स्ट्रैंड को पार्स किया जा सकता है:
    1. स्ट्रैंड के नीचे शुरू करें। यह एक /, |या \परमाणु होगा, जिसे हम रूट कहेंगे । (स्ट्रैंट्स को रूट द्वारा आदेशित बायें से दायें पार्स किया जाता है।)
    2. उस परमाणु को खोजें जो जड़ की ओर इंगित करता है।
      • एक |परमाणु ऊपर और नीचे इंगित करता है। एक -परमाणु बाएं और दाएं इंगित करता है (लेकिन कभी भी जड़ को इंगित नहीं कर सकता है क्योंकि केवल जड़ें नीचे पंक्ति में हो सकती हैं)। एक /परमाणु बाएं-दाएं और ऊपर-दाएं इंगित करता है, और एक\ करता है परमाणु विपरीत करता है।
      • हमेशा एक परमाणु होगा जो मूल परमाणु की ओर इंगित करता है।
    3. एक अप्रयुक्त खोजें परमाणु (वह जो किसी स्ट्रैंड का अभी तक हिस्सा नहीं है) खोजें जो इस परमाणु की ओर इंगित करता है और इस परमाणु के नीचे भी नहीं है (बाल नीचे की ओर नहीं बढ़ सकते हैं, लेकिन बग़ल में ठीक है)।
      • यदि शून्य हैं, तो आप स्ट्रैंड के अंत तक पहुंच गए हैं!
      • यदि एक है, तो यह स्ट्रैंड का अगला परमाणु है। इस परमाणु के साथ चरण 3 को दोहराएं। (यह परमाणु अब चरण 3 के प्रयोजनों के लिए "उपयोग" के रूप में चिह्नित है, क्योंकि यह एक स्ट्रैंड का हिस्सा है।)
      • सिर के किसी भी बिंदु पर यहां कई अप्रयुक्त परमाणु नहीं होंगे ।

इनपुट प्रारूप हो जाएगा:

  • बालों का एक सिर। के रूप में इनपुट किया जा सकता है (शाब्दिक newlines के साथ बहुस्तरीय इनपुट), या newlines के स्थान पर अपनी पसंद का सीमांकक के साथ। ध्यान दें कि सिर हमेशा एक आयत होगा; यानी अनुगामी व्हाट्सएप को आवश्यक रूप से जोड़ा जाएगा (दाईं ओर अजीब सीधी रेखा के बाल भ्रम से बचने के लिए अतिरिक्त अनुगामी व्हाट्सएप को खत्म करना है)।
  • एक नंबर spec 1 निर्दिष्ट करता है कि कितने बाल काटने हैं। इसका वर्णन अगले भाग में विस्तार से किया जाएगा।

आप किसी फ़ंक्शन के लिए इनपुट स्वीकार कर सकते हैं, STDIN / STDOUT का उपयोग कर सकते हैं, आदि (कुछ भी उचित) )।

उत्पादन

आपका आउटपुट बालों के सिर पर लागू बाल कटवाने के साथ होगा। एक बाल कटवाने के लिए, बालों की प्रत्येक स्ट्रैंड की लंबाई को निर्धारित मात्रा से कम करें (जो हमेशा 1 या अधिक होगी), बालों की छोर से जड़ की ओर बढ़ते हुए। हालाँकि, हमेशा जड़ को छोड़ दें!

यहाँ एक सरल उदाहरण है। सिर के लिए इनपुट कहो

\ 
 /
| 
| 

के दूसरे इनपुट के साथ 2, आप स्ट्रैंड से दो परमाणुओं को काटेंगे और परिणाम प्राप्त करेंगे

|
|

और के इनपुट के साथ 42, आउटपुट बस होगा

|

ध्यान दें कि सिर से पहले और बाद में व्हॉट्सएप पूरी तरह से अप्रासंगिक है; आप अतिरिक्त newlines ट्रिम कर सकते हैं या आप अधिक गद्दी जोड़ सकते हैं। इससे कोई फर्क नहीं पड़ता, जब तक कि सिर बरकरार रहता है। (आप व्हॉट्सएप के साथ ही आप जो चाहें कर सकते हैं।)

परीक्षण के मामलों

सभी परीक्षण मामलों के लिए, इस पोस्ट की शुरुआत में प्रस्तुत उदाहरण का उपयोग किया जाएगा।

बाल कटवाने की लंबाई = 1:

          /-   |
 /    \  |     |
\      \ \  \  |
 --\    | \  | |
    / |--  / / |
  |-  //--| /  |
| |  ||   //   |
| \  /|  //  \ |

3 की लंबाई:

         |      
         \     |
 --\    | \    |
    / |--  / / |
  |-  //  | /  |
  |  ||   //   |
| \  /|  //  \ |

7 की लंबाई:

  |-  /   |     
  |  |    /    |
| \  /|  //  \ |

1337 की लंबाई:

| \  /|  //  \ |

स्कोरिंग

यह , इसलिए बाइट्स में सबसे छोटा कोड जीत जाएगा!


क्या नीचे पंक्ति में परमाणु '-' हैं? पॉइंट 2 लगता है कि हाँ, पॉइंट 1 लगता है कि नहीं है।
edc65

@ edc65 नहीं, नहीं हैं। (संपादित स्पष्ट करने के लिए)
दरवाज़े

मुझे लगता है कि परीक्षण के मामले में कोई गलती है। नीचे से चौथी पंक्ति पर, -तीसरे स्ट्रैंड में बाएं पॉइंट से बाएं |स्ट्रैंड में, चौथे स्ट्रैंड में लेफ्ट से
feersum

@ फैर्सम सही। पथ यह निर्धारित करता है कि वह किस ओर इंगित करता है -, न कि वह किस ओर इंगित करता है । उदाहरण के लिए, पहले स्ट्रैंड में |इंगित नहीं होता है /, लेकिन यह इसके द्वारा इंगित किया जाता है /। (हां, मुझे पता है कि यह भ्रामक है; मुझे कई बार GIF को फिर से करना पड़ा क्योंकि मैंने खुद को भी भ्रमित किया है!) इसे समझने का एक आसान तरीका सिर्फ दूसरे स्ट्रैंड के शीर्ष पर देखना हो सकता है।
दरवाज़े

मुझे पता है कि यह पहले के लोगों की ओर इशारा करते हुए बाद के टुकड़ों से निर्धारित होता है। मेरा तर्क यह है कि चौथे स्ट्रैंड में -शामिल होना चाहिए , तीसरे से नहीं।
feersum

जवाबों:


12

जावास्क्रिप्ट (ई 6) 195 212 222 232

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

F=(h,t,
   n=[...h],c=h.search('\n'),
   R=p=>[1,-1,c+2,c+1,c].some((d,i)=>n[p-d]=='--\\|/'[i]?n[p-=d]=1:0)&&R(p)+(R[p]=l++)
  )=>
  n.map((v,p)=>R[p]<t?' ':h[p],n.map((a,p)=>!h[p+c]&a>' '&&R(p,l=0))).join('')

FireFox / FireBug कंसोल में टेस्ट करें

head = "\\         /-- -|\n /   -\\  |  |  |\n\\      \\ \\  \\  |\n --\\    | \\  | |\n    / |--| / / |\n /|-  //--| /  |\n| |  ||   //\\  |\n| \\  /|  //  \\ |";
console.log(F(head,0))
console.log(F(head,1))
console.log(F(head,3))
console.log(F(head,7))
console.log(F(head, 1337))

उत्पादन

\         /-- -|
 /   -\  |  |  |
\      \ \  \  |
 --\    | \  | |
    / |--| / / |
 /|-  //--| /  |
| |  ||   //\  |
| \  /|  //  \ |

          /-   |
 /    \  |     |
\      \ \  \  |
 --\    | \  | |
    / |--  / / |
  |-  //--| /  |
| |  ||   //   |
| \  /|  //  \ |


         |      
         \     |
 --\    | \    |
    / |--  / / |
  |-  //  | /  |
  |  ||   //   |
| \  /|  //  \ |






  |-  /   |     
  |  |    /    |
| \  /|  //  \ |








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