यह चुनौती 2 डी mazes को 1D mazes में बदलने के बारे में है।
अवलोकन
+-+-+-+-+-+-+ +-+-+-+-+-+-+ graph {
| | | | |A| | B| A B A -- D
+ + + + +-+-+ + + + + +-+-+ \ | C -- D
| | | | | | | | \ | D -- E
+-+-+ +-+-+ + +-+-+ +-+-+ + \ | E -- F
| | |C D E F| C---D-E---F E -- G
+-+-+-+ +-+ + +-+-+-+ +-+ + | | B -- F
| | | | G | | .---G | F -- J
+ +-+-+-+ + + + +-+-+-+ + + .' / | G -- H
| | | | |H|I |J| H I-' J G -- I
+-+-+-+-+-+-+ +-+-+-+-+-+-+ (ascii) } // (graphviz dot)
Figure 1 Figure 2 Figure 3
इस चुनौती के प्रयोजनों के लिए, एक पारंपरिक 2 डी भूलभुलैया एक आयताकार भूलभुलैया है जिसे जाली बिंदुओं से बनाया गया है जहां निम्नलिखित सभी हैं:
- यह बंद है (बाहरी रिम दीवारों द्वारा जुड़ा हुआ है)।
- सभी जाली बिंदु दीवारों से जुड़े हैं
- यह जुड़ा हुआ है (हर दो स्थानों के लिए X और Y उनके बीच एक रास्ता है)
- यह एसाइक्लिक है (किसी भी जगह से कोई रास्ता नहीं है एक्स बैक टू एक्स बिना बैकट्रैकिंग के)
चित्रा 1 एक पारंपरिक 2 डी भूलभुलैया दिखाता है। इन मजाज़ों की रुचि के तीन क्षेत्र हैं:
- मृत समाप्त होता है - ऐसे स्थान जहां से केवल एक ही उपलब्ध मार्ग है
- गलियारे - वे स्थान जहाँ से दो उपलब्ध रास्ते हैं
- निर्णय बिंदु - वे स्थान जहाँ से तीन या चार उपलब्ध रास्ते हैं
इस तरह के हर चक्रव्यूह के लिए, एक ऐसा ग्राफ बनाया जा सकता है जहां मृत अंत और निर्णय बिंदु नोड होते हैं, और गलियारे के साथ एक मार्ग से जुड़े प्रत्येक दो नोड्स के बीच एक किनारे होता है। चित्रा 2 ऐसे नोड्स को लेबल के साथ एक ही भूलभुलैया दिखाता है, और चित्रा 3 भूलभुलैया का ग्राफ (एएससीआईआई और ग्राफविज़ डॉट नोटेशन में)।
1 डी mazes
1 डी mazes ताना बिंदुओं को शामिल करते हैं, जो जोड़े में आते हैं, और एक पत्र का उपयोग करके पहचाने जाते हैं (या तो मामले में)। चित्रा 4 एक उदाहरण 1D भूलभुलैया दिखाता है। यह अन्यथा 1 की ऊंचाई के साथ 2 डी भूलभुलैया के समान है, जैसा कि चित्र 5 में दिखाया गया है। चित्रा 5 में विशेष रूप से नोट करें +
जो चिह्नित किए गए जाली बिंदु पदों पर हैं , जो कि बाएं से दाएं की ओर है; 1 डी भूलभुलैया में, बाईं दीवार से शुरू होने वाला प्रत्येक अन्य वर्ण भी एक जाली बिंदु है।
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| D| D E|G E F| F | G | | D| D E|G E F| F | G |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 4 Figure 5
इस चक्रव्यूह को नेविगेट करने के नियम इस प्रकार हैं। हर कदम को आगे ( >
) या पिछड़े ( <
) के रूप में दर्शाया जा सकता है । आगे और पीछे डिफ़ॉल्ट रूप से हमारे सहज स्थानिक जागरूकता के रूप में एक ही अर्थ है; आगे की स्थिति तुरंत दाईं ओर जाती है, और पीछे की ओर तुरंत बाईं ओर।
ताना बिंदु उन स्थानों का प्रतिनिधित्व करते हैं जो पड़ोसियों के साथ विषम रूप से जुड़ाव की अदला-बदली करते हैं। यदि आप पड़ोसी से ताना बिंदु पर आ रहे हैं, तो दो ताना बिंदुओं की स्थिति बदली हुई है; यदि आप पड़ोसी से ताना बिंदु से आ रहे हैं, तो उन्हें स्वैप नहीं किया जाता है। उदाहरण के लिए, चित्रा 6 में, 1 से पीछे की ओर जाना आपको 2 तक लाता है (क्योंकि 1 जी का पड़ोसी है, और हम पड़ोसी से बढ़ रहे हैं, अंक 2 और @ स्वैप किए गए हैं)। 2 से आगे बढ़ते हुए (ताना बिंदु जी) आपको 3 पर लाता है (यहां, हम एक ताना बिंदु से शुरू कर रहे हैं, इसलिए कोई स्वैप नहीं है)। इसी तरह, 3 से पीछे की ओर बढ़ने से आप @ तक पहुँचते हैं।
54 2367 89^ @1
| D| D E|G E F| F | G |
Y X
Figure 6
चित्रा 6 चालों के अनुक्रम का उपयोग करके एक्स से वाई तक एक उदाहरण नेविगेशन दिखाता है <<>><>>>>>
। ये चालें आपको 123456789^
उस क्रम में क्रमशः लेबल किए गए बिंदुओं पर लाती हैं । अगले अनुभाग में कोड स्निपेट का उपयोग करके खुद को इसका पता लगाने के लिए स्वतंत्र महसूस करें।
2 डी को 1 डी में परिवर्तित करना
1 डी भूलभुलैया को देखते हुए, एक ग्राफ बना सकता है जहां प्रत्येक नोड या तो एक मृत अंत या एक ताना बिंदु जोड़ी है, और किनारे गलियारे से जुड़े किसी भी दो नोड्स के बीच मौजूद हैं। यह ग्राफ हमें 1D और 2D mazes की तुलना करने की अनुमति देता है।
उदाहरण के लिए, चित्र 4 में 1D भूलभुलैया चित्र 1 में वही भूलभुलैया है। यह देखने के लिए कि, चित्र 7 मृत सिरों पर लेबल क्यों जोड़ता है। ग्राफ़ बनाने के लिए उन लेबलों का उपयोग करना, चित्र 7 का ग्राफ़ बस चित्र 3 फिर से है। चित्र 8 इस ग्राफ के निर्माण का एक ब्रेकआउट दिखाता है।
| D| D E|G E F| F | G |
A C B J H I
Figure 7
| D| D E|G E F| F | G |
+ + + + + + + + + + + + + + + <- lattice points
|A |C | |B J|H I| <- dead ends
|A D|C D E|G E F|B F J|H G I| <- all nodes (dead ends+warp points); i.e.:
"where each end is either a dead end
or a warp point pair"; note that each
pair of warp points is the same node.
|A-D|C-D-E|G-E-F|B-F-J|H-G-I| <- corridors; note each is a connection, since
1 2 3 4 5 6 7 8 9 "edges exist between any two nodes
connected along a corridor"
graph { graph {
A -- D // 1 <----> A -- D
C -- D // 2 <----> C -- D
D -- E // 3 <----> D -- E
G -- E // 4 <----> E -- G
E -- F // 5 <----> E -- F
B -- F // 6 <----> B -- F
F -- J // 7 <----> F -- J
H -- G // 8 <----> G -- H
G -- I // 9 <----> G -- I
} ^ }
Built from | From Figure 3
1D maze `-> isomorphic mappings
Figure 8
(ध्यान दें कि प्रत्येक ग्राफ के लेबल और लेआउट चित्रण प्रयोजनों के लिए संरेखित करने के लिए कृत्रिम रूप से चुने गए थे; आम तौर पर बोलते हुए यह एक ग्राफ समरूपता समस्या है )।
निम्नलिखित स्निपेट को 1D भूलभुलैया और 1D भूलभुलैया, समतुल्य ग्राफ और 2 डी भूलभुलैया के बीच संबंध की कल्पना करने में मदद करने के लिए प्रदान किया जाता है।
जैसा कि आप इस स्निपेट में 1D भूलभुलैया नेविगेट करते हैं, आपके द्वारा स्पर्श किए गए अंतिम दो नोड हाइलाइट किए जाते हैं। समतुल्य ग्राफ और 2 डी भूलभुलैया पर समान नोड्स को उसी तरह से हाइलाइट किया गया है।
सामान्य तौर पर, किसी भी पारंपरिक 2D भूलभुलैया के लिए इस प्रकार का 1D भूलभुलैया बनाया जा सकता है। एक और अधिक जटिल उदाहरण चित्र 9 है:
+-+-+-+-+-+-+ +-+-+-+-+-+-+ graph {
| | | | | |A| | |B| A B A -- D
+ + + + + + + + + + + + + + \ / C -- D
| | | | | | | | | | \ / D -- E
+-+-+ + +-+-+ +-+-+ + +-+-+ \ / B -- E
| | |C D E | C---D-E E -- F
+-+-+-+ +-+ + +-+-+-+ +-+ + |\ E -- I
| | | | F | | .---F \ F -- G
+ +-+-+-+ + + + +-+-+-+ + + .' / \ G -- H
| | | | |G|H |I| G H-' I H -- I
+-+-+-+-+-+-+ +-+-+-+-+-+-+ (ascii) } // (graphviz dot)
Figure 9 Figure 10 Figure 11
| D| D E |F E | F | | D| D E |F E | F |
A C I B G H
Figure 12 Figure 13
इस भूलभुलैया में चार रास्तों के साथ एक नोड है (चित्र 10 में ई)। चित्र 11 इसका ग्राफ दर्शाता है। चित्रा 12 एक बराबर 1D भूलभुलैया है; और चित्रा 13 चित्र 11 के साथ तुलना करने के लिए मृत सिरों के लेबल के साथ एक ही भूलभुलैया दिखाता है।
चुनौती
इनपुट के रूप में 2 डी भूलभुलैया को देखते हुए, एक फ़ंक्शन या प्रोग्राम लिखें जो 2 डी भूलभुलैया को 1 डी भूलभुलैया में ताना बिंदुओं के साथ बदल देता है। ताना अंक प्रत्येक मामले में 52 पत्रों में से किसी का उपयोग कर सकते हैं।
इनपुट गारंटी (यदि इनमें से कोई भी इनपुट आपको पूरा नहीं करना है, तो उससे निपटने के लिए):
- इनपुट भूलभुलैया जुड़ा हुआ है (अर्थात, आप हमेशा किसी भी स्थान से किसी अन्य पर जा सकते हैं)।
- इनपुट भूलभुलैया बंद है।
- इनपुट भूलभुलैया आयताकार है।
- सभी जाली बिंदु उपयोग करते हैं
+
। - एक ही पंक्ति के उपयोग पर जाली बिंदुओं के बीच सभी दीवारें
|
- समान स्तंभ उपयोग में जाली बिंदुओं के बीच की सभी दीवारें
-
। - सभी रिक्त स्थान एक पथ का हिस्सा हैं (और भूलभुलैया के अंदर सभी)।
- पथ सभी रिक्त स्थान हैं (यह हमेशा पारंपरिक, गैर-युद्धशील होगा)
- रास्ते ठीक एक जगह चौड़े हैं।
- भूलभुलैया एक जाली पर बिंदुओं को जोड़कर बनाया गया है।
- भूलभुलैया के ग्राफ में 52 से अधिक कुल नोड्स (यानी, डेड एंड प्लस निर्णय बिंदु) नहीं हैं।
आउटपुट स्वरूप:
- आपका आउटपुट 1D भूलभुलैया दिखाने वाली एकल पंक्ति होनी चाहिए ।
- आपके आउटपुट में कोई अग्रणी / अनुगामी व्हाट्सएप नहीं होना चाहिए; सिवाय इसके कि एक अनुगामी न्यूलाइन ठीक है।
- पहला चरित्र और उसके बाद का प्रत्येक चरित्र जाली बिंदु हैं।
- सभी दीवारें जाली बिंदुओं पर होनी चाहिए; और उनके बीच सभी ताना बिंदु।
- आपके 1D भूलभुलैया का ग्राफ 2D भूलभुलैया के ग्राफ के बराबर होना चाहिए।
- आपके 1D mazes कॉम्पैक्ट होने चाहिए; सभी गैर-जाली बिंदु मृत छोर (यानी, दीवारों से सटे) या ताना बिंदु होने चाहिए।
- केवल अक्षर अपने उत्पादन में ताना अंक होना चाहिए। प्रत्येक ताना बिंदु लाइन पर दो बार होता है।
उदाहरण:
| D| D E|G E F| F | G | <- (1,2) The single line output
+ + + + + + + + + + + + + + + <- lattice point spacing... (3)
(4,6) lattice points are all walls or spaces
(5) See Figure 8
(7) D, E, F, G appear twice; no other labels
यह कोड-गोल्फ है। विजेता कम से कम बाइट्स के साथ सही गैर-लूपोल जमा है।
परिक्षण
इस चुनौती के लिए कोई भी परीक्षण के मामले नहीं हैं, क्योंकि बड़ी संख्या में किसी भी नैटिवियल भूलभुलैया के लिए सही आउटपुट हैं।
हालाँकि, मैंने C ++ में एक चेकर बनाया है (यह चेकर ग्राफ ग्राफ्यूलेशन के माध्यम से दोनों सॉल्यूशंस को ग्राफ करता है )।
इसके अलावा, उचित स्वरूपण को समझने में मदद करने के लिए यहां कुछ उदाहरण दिए गए हैं:
उदाहरण 1
+-+-+-+-+-+-+
| | | |
+ + + + +-+-+
| | | |
+-+-+ +-+-+ +
| |
+-+-+-+ +-+ +
| | |
+ +-+-+-+ + +
| | | |
+-+-+-+-+-+-+
->
| D| D E|G E F| F | G |
उदाहरण 2
+-+-+-+-+-+-+
| | | | |
+ + + + + + +
| | | | |
+-+-+ + +-+-+
| |
+-+-+-+ +-+ +
| | |
+ +-+-+-+ + +
| | | |
+-+-+-+-+-+-+
->
| D| D E |F E | F |