अस्वीकरण
जबकि मुझे पता है कि यह विशेष रूप से संबंधित प्रश्न है , मेरा प्रश्न दो गेराज दरवाजे, एक यादृच्छिक घटक का उपयोग करता है, और मैं इसे वास्तविक जीवन की घटनाओं पर भी आधारित कर रहा हूं, अपने बेटे को गलती से उक्त गेराज दरवाजे में से एक को कम करते हुए देखकर, जब मैं बाहर चल रहा था। गेराज पिछले हफ्ते ... रचनात्मक रस बहने के लिए सिर पर एक झटका की तरह कुछ भी नहीं! ;)
पृष्ठ - भूमि
लुकास (मेरा 15 महीने का बेटा) गैरेज रिमोट से खेलना पसंद करता है। इस रिमोट पर दो बटन होते हैं, एक बाएं गैराज के दरवाजे के लिए और दूसरा दाएं गैराज के दरवाजे के लिए। दोनों बटन एक ही तरीके से काम करते हैं; खोलने के लिए दरवाजा पाने के लिए एक बार दबाएं, फिर से बंद करने के लिए फिर से दबाएं, बंद करने के लिए फिर से दबाएं, फिर से बंद करने के लिए फिर से दबाएं, और इसी तरह।
लुकास को यह रिमोट बहुत पसंद है, वह बेतरतीब ढंग से एक बटन दबाएगा, या दोनों, या कोई भी नहीं। यदि दोनों को दबाया जाता है, तो कोई संकेत नहीं भेजा जाता है, लेकिन एक बटन का एक प्रेस एक संकेत भेज देगा।
तो, कोड-गोल्फ चुनौती दो भागों में विभाजित है:
भाग एक
एक मिनट में लुकास यादृच्छिक बटन प्रेस का प्रतिनिधित्व करने वाला 60 वर्ण लंबा तार उत्पन्न करें। इस मामले में "यादृच्छिक" का अर्थ है "प्रत्येक टिक पर प्रत्येक इनपुट के समान अवसर के साथ"। वर्ण इस प्रकार हैं:
- 0: लुकास ने या तो कोई बटन नहीं दबाया है, या दोनों बटन दबाए हैं। किसी भी तरह से, कोई संकेत नहीं भेजा गया है।
- 1: लुकास द्वारा बाएं गैराज के दरवाजे का बटन दबाया गया है
- 2: सही गेराज दरवाजे के लिए बटन को लुकास द्वारा दबाया गया है
भाग दो
पार्ट वन में उत्पन्न स्ट्रिंग का उपयोग करके, इन दरवाजों को खोलने, रोकने और बंद करने के लिए ट्रिगर के रूप में संख्याओं का उपयोग करके दो-कार गैरेज के उद्घाटन और समापन का अनुकरण करें।
मेरे गेराज दरवाजे बहुत जल्दी हैं (ऊपर अस्वीकरण क्यों देखें)। एक बार जब आप बटन दबाते हैं तो पूरी तरह से खुला या बंद होने में चार सेकंड लगते हैं।
तो, अगर बंद:
- 0 सेकंड: 0% खुला (बंद); जब बटन दबाया जाता है, तो दरवाजा खुलने लगता है
- 1 सेकंड: 25% खुला
- 2 सेकंड: 50% खुला
- 3 सेकंड: 75% खुला
- 4 सेकंड: 100% खुला, दरवाजा बंद हो जाता है
और इसलिए, यदि खुला:
- 0 सेकंड: 100% खुला; जब बटन दबाया जाता है, तो दरवाजा बंद होने लगता है
- 1 सेकंड: 75% खुला
- 2 सेकंड: 50% खुला
- 3 सेकंड: 25% खुला
- 4 सेकंड: 0% खुला (बंद), दरवाजा बंद हो जाता है
यदि कोई विशेष द्वार गति में है, तो उसी द्वार का संकेत उसे रोक देगा। इसके बाद उसी दरवाजे पर भेजा जाने वाला अगला सिग्नल इसे विपरीत दिशा में आगे बढ़ाएगा। यदि किसी दरवाजे को तब रोका जाता है जब वह पहले गति में होता है और "स्टॉप" सिग्नल प्राप्त होने पर अब पूरी तरह से खुला या पूरी तरह से बंद हो जाता है, तो दरवाजा पूरी तरह से खुले या पूरी तरह से बंद अवस्था में "बंद" के रूप में पंजीकृत होगा, के लिए तैयार जब यह एक नया संकेत प्राप्त करता है तो विपरीत दिशा में जाएं।
इस सिमुलेशन के साथ, दोनों गेराज दरवाजे शुरू में बंद स्थिति में होंगे। तो, आइए आज्ञाओं की 10 दूसरी सूची देखें और देखें कि क्या होता है अगर लुकास रिमोट पर उन्हें प्रदर्शन करने के लिए था:
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
उत्पादन
आउटपुट के पहले भाग में "एक", "1", "1" और "2" वर्णों के 60 वर्ण लंबे स्ट्रिंग के प्रदर्शन की आवश्यकता होती है। जैसे।
212022112021202211202120221120212022112021202211202120221120
इस स्ट्रिंग के नीचे, इन "सिग्नल" का प्रसंस्करण ऊपर वर्णित नियमों के अनुसार है कि गेराज दरवाजे प्रत्येक संबंधित चरित्र के साथ कैसे व्यवहार करेंगे (एक सेकंड से दूसरे आधार पर)। आपको प्रारंभिक प्रदर्शन स्ट्रिंग के नीचे 60 लाइनों के साथ समाप्त होना चाहिए।
इनमें से प्रत्येक संसाधित रेखाएँ इस प्रकार होंगी:
N: (L:X% XXXXXXX, R:Y% YYYYYYY)जहाँ:
- एन संबंधित यादृच्छिक स्ट्रिंग से nth वर्ण है, जो कि 0, 1, या 2 के रूप में होगा।
- X% बाएं दरवाजे के खुलेपन का प्रतिशत है (कोई शून्य पैडिंग नहीं है)
- XXXXXXX बाएं दरवाजे की स्थिति है। यदि दरवाजा गति में नहीं है (अर्थात खुलने या बंद नहीं होने पर) स्थिति "रोका" लागू है, तो इसका अर्थ है कि इसे गति में रोक दिया गया है (केवल 25%, 50% या 75% पर संभव है) या पूरी तरह से खुला होने पर रुका हुआ (100%) ) या पूरी तरह से बंद (0%)। अन्यथा, दरवाजा या तो "खोलना" या "बंद करना" होगा।
- Y% दाहिने दरवाजे के खुलेपन का प्रतिशत है (कोई शून्य पैडिंग नहीं है)
- YYYYYYY सही द्वार की स्थिति है। यदि दरवाजा गति में नहीं है (अर्थात खुलने या बंद नहीं होने पर) स्थिति "रोका" लागू है, तो इसका अर्थ है कि इसे गति में रोक दिया गया है (केवल 25%, 50% या 75% पर संभव है) या पूरी तरह से खुला होने पर रुका हुआ (100%) ) या पूरी तरह से बंद (0%)। अन्यथा, दरवाजा या तो "खोलना" या "बंद करना" होगा।
उदाहरण 10 "सिग्नल" और 10 संसाधित लाइनों का उपयोग करके नीचे दिखाया गया है
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
यह कोड-गोल्फ है, इसलिए सबसे छोटा कोड स्पष्ट विजेता होगा। मैंने "ओपनिंग", "रोका" और "क्लोज़िंग" जैसे वाक्यांशों का उपयोग करके इसे थोड़ा आसान बना दिया है, जो सभी सात अक्षर हैं ... इसलिए आप अपनी रणनीति में काम करना चाहते हैं।
शुभकामनाएँ!
1आपके उदाहरण में अंतिम कमांड बाएं दरवाजे को 75% पर क्यों नहीं रोक रहा है?