सबसे पहचानने फिसलने पहेली है पंद्रह पहेली । इसमें 4 बाय 4 ग्रिड, 15 टाइलें और एक खाली ग्रिड स्थान है। टाइलें केवल खाली जगह में जा सकती हैं और हमेशा ग्रिड के अनुरूप होनी चाहिए।
आइए एक सामान्यीकृत स्लाइडिंग पहेली को H उच्च ग्रिड ( W , H दोनों धनात्मक पूर्णांक) द्वारा दो आयामी W के रूप में परिभाषित करें जिसमें समरूप चिन्हित टाइलों की संख्या ( उनमें से 0 और W × H के बीच ) ग्रिड में तड़कने के लिए रखी गई है, किसी भी तरह (ओवरलैपिंग के बिना), खाली ग्रिड रिक्त स्थान के साथ शेष क्षेत्र को भरने के साथ।
उदाहरण के लिए यदि डब्ल्यू और एच 3 हैं और एक टाइल है T
और एक खाली जगह E
कई संभावित साइडिंग पहेली व्यवस्थाओं में से एक है
TTT
TET
EET
धक्का सब कुछ: इन पहेलियों के लिए वहाँ 4 संभव चाल हैं अप , धक्का सब कुछ नीचे , धक्का सब कुछ छोड़ दिया है , या धक्का सब कुछ सही । किसी दिशा में 'शोविंग' सभी टाइलों को उस दिशा में यात्रा करता है जहाँ तक संभव हो कि वे एक और टाइल या ग्रिड की सीमा से टकराते हैं। कभी-कभी शेवरिंग ग्रिड के लेआउट को नहीं बदलेगा,
यदि उदाहरण ग्रिड सही है तो परिणाम है
TTT
ETT
EET
परिणाम छोड़ दिया गया है
TTT
TTE
TEE
परिणाम नीचे दिया गया है
EET
TET
TTT
(ध्यान दें कि दोनों सबसे बाईं ओर T
चले गए)
शोविंग अप इस मामले में ग्रिड लेआउट को नहीं बदलता है।
ध्यान दें कि चूंकि टाइलें अप्रभेद्य हैं, इसलिए इन पहेलियों में 'सॉल्व' स्टेट्स नहीं हैं। यह भी ध्यान दें कि एक लेआउट में एक पहेली शुरू हो सकती है, जिसे एक बार बंद करने के बाद वापस प्राप्त करना असंभव है (जैसे 3 बाय 3 ग्रिड के बीच में एक टाइल)।
चुनौती
केवल मुद्रण योग्य ASCII का उपयोग करके कोड के दो आयताकार ब्लॉक लिखें, दोनों एम अक्षर चौड़े और एन अक्षर लंबे (किसी भी सकारात्मक पूर्णांक एम , एन के लिए )। एक कोड ब्लॉक एक स्लाइडिंग पहेली की टाइल का प्रतिनिधित्व करेगा, दूसरा कोड ब्लॉक एक खाली ग्रिड स्थान का प्रतिनिधित्व करेगा।
इन दो कोड ब्लॉक को W द्वारा H ग्रिड में व्यवस्थित करने से एक कोड-प्रतिनिधित्व वाली स्लाइडिंग पहेली बन जाएगी जिसे टेक्स्ट फ़ाइल के रूप में सहेजा जा सकता है और एक सामान्य प्रोग्राम के रूप में चलाया जा सकता है। जब चलाया जाता है, तो इस तरह के कार्यक्रमों को 1 से 4 तक की संख्या के लिए उपयोगकर्ता को स्टड के माध्यम से संकेत देना चाहिए; 1 अप, 2 डाउन, 3 लेफ्ट, 4 राइट के लिए है । जब उपयोगकर्ता अपनी संख्या में टाइप करता है और हिट करता है, तो प्रोग्राम यह गणना करता है कि उस दिशा में अपने स्रोत कोड टाइल को कैसे हिलाएं और एक फ़ाइल में नई पहेली लेआउट (या तो एक नई फ़ाइल या उसी फ़ाइल में) को सहेजता है, फिर समाप्त हो जाता है।
इस प्रक्रिया को प्रत्येक ढाल के बाद उत्पन्न नई स्लाइडिंग पहेली कोड फ़ाइल के साथ अनिश्चित काल तक दोहराया जा सकता है।
उदाहरण
मान लीजिए मेरा टाइल कोड ब्लॉक इस तरह दिखता है
// my
// tile
और मेरा खाली ग्रिड स्पेस कोड ब्लॉक इस तरह दिखता है
//empty
//space
( M = 7, N = 2, यह निश्चित रूप से वास्तविक कोड नहीं है)
इन दो ब्लॉकों की किसी भी वैध स्लाइडिंग पहेली व्यवस्था को उस भाषा में एक कार्यक्रम बनाना चाहिए जिसका मैं उपयोग कर रहा हूं जिसे उपयोगकर्ता को किसी दिशा में जाने देने के लिए चलाया जा सकता है।
उदाहरण ग्रिड का कोड प्रतिनिधित्व है:
// my// my// my
// tile// tile// tile
// my//empty// my
// tile//space// tile
//empty//empty// my
//space//space// tile
इसलिए इसे चलाकर 2 (नीचे के लिए) दबाएं और फिर इसे दूसरी फ़ाइल (या उसी फ़ाइल) में लिखें:
//empty//empty// my
//space//space// tile
// my//empty// my
// tile//space// tile
// my// my// my
// tile// tile// tile
फिर उस फाइल को उसी तरीके से चलाया और चलाया जा सकता है।
टिप्पणियाँ
H स्लाइडिंग पज़ल द्वारा W के किसी भी कोड-प्रतिनिधित्व को चलाने योग्य होना चाहिए और खुद को ठीक से चमकाने में सक्षम होना चाहिए। इसमें 1 से 1 तक के सभी ग्रिड आकार कुछ उचित अधिकतम (2 16 बाय 2 16 या अधिक) शामिल हैं।
एक प्रोग्राम अपना स्वयं का सोर्स कोड पढ़ सकता है । कोई क़ैद-आधारित प्रतिबंध नहीं हैं। किसी भी प्रकार की टिप्पणियाँ भी ठीक हैं।
कार्यक्रम को दिशा देने के लिए संकेत देना चाहिए, भले ही कोई टाइलें न हों या कोई टाइलें न हिलाई जा सकती हों। प्रॉम्प्ट केवल एक नंबर में टाइप करने के लिए एक जगह है, कोई संदेश की आवश्यकता नहीं है।
आप मान सकते हैं कि इनपुट हमेशा वैध (1, 2, 3 या 4) है।
रिक्त स्थान के साथ अपने कोड ब्लॉक को ठीक करना। याद रखें कि वे केवल मुद्रण योग्य ASCII हो सकते हैं, इसका मतलब कोई टैब और कोई नईलाइन नहीं है (इसके अलावा कोड ब्लॉक बनाने में मदद करने वाली नई सूचियों के अलावा)।
यदि आपकी भाषा स्टड के उपयोग का समर्थन नहीं करती है जो भी इनपुट विधि निकटतम लगती है।
आपको आवश्यकता हो सकती है कि आपकी कोड-पहेली फ़ाइलों के अंत में एक नई पंक्ति हो। (या आवश्यकता है कि यह वहां न हो।)
आप नई फ़ाइलों को कैसे नाम देते हैं यह महत्वपूर्ण नहीं है।
f.txt
या अभीf
ठीक है।दो कोड ब्लॉक समान नहीं हो सकते हैं।
स्कोरिंग
लक्ष्य यह सबसे छोटे कोड आकार (यही कारण है कि यह कोड-गोल्फ टैग है) के साथ ऐसा करने के लिए है। सबसे छोटे कोड ब्लॉक क्षेत्र ( M × N ) के साथ प्रस्तुत करने वाला विजेता है। टाई-ब्रेकर सबसे अधिक मतदान के जवाब में जाता है।
संबंधित: कोड जो जीवन के खेल को स्वयं चलाता है
f.txt
? हाँ।