दर्पणों का एक कमरा


18

(यह चुनौती बहुत समान है, लेकिन इस मौजूदा चुनौती में अतिरिक्त जटिलताएं हैं।)


एक 2-आयामी कमरे की कल्पना करें, जहां दीवारें सपाट दर्पणों से युक्त हैं।

अचानक, प्रकाश का एक बीम कमरे में घुसता है, जहां दीवार का एक टुकड़ा गायब है! लाइटबीम कमरे के चारों ओर नृत्य करती है, दीवार के दर्पणों से परावर्तित हो जाती है, और अंततः कमरे को फिर से छोड़ देती है।

तर्क

: आप 5 चर दिया जाता है डब्ल्यू, एच, पहला, दूसरा और जेड
अब, उनका क्या मतलब है?

डब्ल्यू, एच कमरे का आकार (दीवारों सहित) है, जिसमें डब्ल्यू चौड़ाई और एच ऊंचाई है।
एक्स, वाई समन्वय है कि दीवार में छेद है। आप मान सकते हैं कि यह हमेशा एक दीवार टाइल पर स्थित है। निर्देशांक 0-आधारित हैं, जिसमें X- अक्ष दाईं ओर और Y- अक्ष नीचे की ओर इंगित करता है।
जेड एकल वर्ण, दिशा कि प्रकाश या तो कमरे में गिर जाता है, का प्रतिनिधित्व करता है \या /

कमरे का निर्माण निम्न वर्णों से किया जाना है:

  • | क्षैतिज दीवारों के लिए
  • - ऊर्ध्वाधर दीवारों के लिए
  • + कोनों के लिए

उदाहरण: (W = 7, H = 4)

+-----+
|     |
|     |
+-----+

अब जब हमारे पास एक कमरा है, तो दीवार की टाइलों में से एक को नष्ट करने देता है, इसलिए प्रकाश की किरण कमरे में गिरती है। प्रकाश की बीम विकर्ण लाइनों, का प्रतिनिधित्व करती हैं \और /अक्षर।

आइए \प्रकाश की किरण के साथ दीवार टाइल को X = 2, Y = 0 पर बदलें ।

+-\---+
|     |
|     |
+-----+

जब तक यह एक दर्पण दीवार से टकराता है, आने वाली रोशनी पूरे कमरे में तिरछी यात्रा करती है। यदि एक दीवार को मारा जाता है, तो दिशा दीवार के अक्ष के साथ अंदर जाती है, और बीम पर यात्रा होती है।

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

इस उदाहरण में, प्रकाश किरण एक ऐसे बिंदु पर पहुंच जाती है, जहां दीवार का एक कोना टकराता है, जो इस बात को संक्रमित करता है कि किरण पूरी तरह से उलट जाती है और सभी तरह से वापस यात्रा करती है, अंत में कमरे को छोड़कर।

आपका कार्य

एक प्रोग्राम लिखें जो कमरे और प्रकाश किरण के पूरे मार्ग को प्रिंट करता है, जब तक कि यह कमरे को फिर से नहीं छोड़ता या एक अनंत लूप में दोहराता है।

इनपुट

इनपुट किसी भी उचित प्रारूप में प्राप्त किया जा सकता है, लेकिन इसमें 4 पूर्णांक डब्ल्यू, एच, एक्स, वाई और चरित्र जेड शामिल हैं, उदाहरण के लिए [10, 8, 0, 3, \]

आप मान सकते हैं कि:

  • डब्ल्यू, एच> = ३
  • X, Y हमेशा एक दीवार पर स्थित होते हैं
  • जेड केवल मूल्यों को नियंत्रित करने में सक्षम हो जाएगा \और /

उत्पादन

आप यह तय कर सकते हैं कि आप एक स्ट्रिंग लौटाते हैं या सीधे आउटपुट stdout
इसमें कमरे की दीवार और प्रकाश किरण (ऊपर ASCII वर्णों द्वारा परिभाषित) को शामिल करना है।

नियम

  • मानक खामियों को मना किया जाता है।
  • यह , इसलिए किसी भी भाषा में बाइट्स में सबसे छोटा कोड है, जीतता है।
  • इस चुनौती के प्रकाशन से पहले बनाई गई सभी कोडिंग भाषाओं की अनुमति है।

उदाहरण

इनपुट: [5, 4, 2, 0, /]

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

इनपुट: [20, 3, 0, 1, \]

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

इनपुट: [10, 8, 0, 3, \] (अनंत लूप का उदाहरण जो कमरे को फिर से नहीं छोड़ेगा।)

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

सौभाग्य!

जवाबों:


5

चारकोल , 55 बाइट्स

BNNJNNPψ↷⎇⁼δ/⎇∧⁻⁻θ¹ζIε⁷I3⎇∧IζIε⁵I1W¬℅KK«¹F³¿∧κ℅KK«↷κ¶↷κ

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। संपादित करें: मुझे नहीं पता कि क्यों, लेकिन वह कोड अभी काम नहीं कर रहा है। यहाँ एक बदले संस्करण है। मूल कोड की व्याख्या:

BNN

बाहरी बॉक्स ड्रा करें।

JNNPψ

कर्सर को प्रवेश बिंदु पर ले जाएं और इस बिंदु पर बॉक्स में एक छेद बनाएं, ताकि यह पृष्ठभूमि बन जाए।

↷⎇⁼δ/⎇∧⁻⁻θ¹ζIε⁷I3⎇∧IζIε⁵I1P

प्रारंभिक दिशा खंड को प्रिंट करने के लिए उचित दिशा में घुमाएं।

W¬℅KK«¹

जबकि कर्सर एक छेद के ऊपर है, अगली पंक्ति खंड को ड्रा करें।

F³¿∧κ℅KK«↷κ¶↷κ

एक छेद के लिए देखो जिसमें अगली पंक्ति खंड को आकर्षित करना है। यह एक ही कोड को तीन बार दोहराकर काम करता है। पहली बार, कुछ भी नहीं होता है। दूसरी बार, यदि कर्सर एक छेद से अधिक नहीं है, तो यह सही 45 ° घूमता है, फिर दाईं ओर एक कदम बढ़ाता है, फिर दाएं 45 ° घूमता है। यह एक अक्ष में इसे प्रतिबिंबित करने का प्रभाव है। तीसरी बार, यदि कर्सर अभी भी एक छेद से अधिक नहीं है, तो यह दाएं 90 ° घूमता है, फिर दाईं ओर एक कदम बढ़ाता है, फिर दाएं 90 ° घूमता है। इससे प्रतिबिंब को दूसरी धुरी में बदलने का प्रभाव पड़ता है। यदि अभी भी छेद नहीं है, तो एक कोने या अनंत लूप तक पहुंच गया है, इसलिए बाहरी लूप टिका है।


1
लोगों के लिए आपके कोड कार्यों का परीक्षण करने के लिए, यह गोल्फ कोड से ऑनलाइन लिंक करने में मदद करेगा, जिसमें वर्बोज़ संस्करण अलग से होगा।
ट्राइकोप्लाक्स



@trichoplax TIO लिंक वास्तव में आउटपुट में गॉल्फर्ड कोड दिखाता है, जहां मैं इसे कॉपी और पेस्ट करता हूं ...
नील

1
@trichoplax जब आप उपयोग करते हैं -v -slतो यह वास्तव में अनुवादित रसीला कोड होता है जैसा कि मुद्रित होता है जिसे निष्पादित किया जाता है। यह निश्चित रूप से डीवरबोसिफायर पर निर्भर करता है ताकि सही सक्सेस कोड उत्पन्न किया जा सके, क्योंकि यदि यह नहीं होता है, तो उत्पन्न कोड विफल हो जाता है, भले ही मूल क्रिया कोड तकनीकी रूप से सही था।
नील
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.