एक कोड आकर्षक पहेली कोड!


12

सबसे पहचानने फिसलने पहेली है पंद्रह पहेली । इसमें 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 ) के साथ प्रस्तुत करने वाला विजेता है। टाई-ब्रेकर सबसे अधिक मतदान के जवाब में जाता है।

संबंधित: कोड जो जीवन के खेल को स्वयं चलाता है


तो कार्यक्रम को काम करने की आवश्यकता है जब केवल खाली स्थान हैं और कोई टाइल ब्लॉक नहीं है (और इसके विपरीत)?
grc

@grc अपने पहले प्रश्न के लिए हाँ, और यह याद रखें कि अभी भी पूरी तरह से खाली या भरे होने पर भी एक शॉव मान के लिए संकेत देना होगा। कोई भी ब्लॉक समान नहीं हो सकता। मुझे लगता है कि अगर वे थे तो आप काफी तुच्छ जवाब दे सकते हैं। तो मैं उसका उल्लेख करूंगा।
केल्विन के शौक

क्या मैं मूल स्रोत फ़ाइल का नाम निर्दिष्ट कर सकता हूं?
फ़ेरसम

@ Faersum क्या आप मान सकते हैं कि यह हमेशा है f.txt? हाँ।
केल्विन के शौक 14

हमेशा 1 लाइन बनने के लिए कोडब्लॉक नहीं होते हैं? मल्टी-लाइन कोडब्लॉक मुझे वास्तव में जटिल लगते हैं और 2 डी एसोलंगेज के पास शायद फाइल लिखने के लिए समर्थन नहीं है।
डिफेंस

जवाबों:


5

टीईसीओ , 153

खाली ब्लॉक:

0T@^Ux#EBx#27@:^Ux##MxA1^QUq^T%d/51%w"G153UsZ/QqUlQq/153Un|Qq%s/153UlZ/QqUn'Qd&1UhQl<.UpQn<Qh-\"F%c'TRQs:C>QpJQn<D-%c"L%c1-Qh\|Qh\'RQs:C>Qw"GC|153%pJ'>EX

टाइल ब्लॉक:

1T@^Ux#EBx#27@:^Ux##MxA1^QUq^T%d/51%w"G153UsZ/QqUlQq/153Un|Qq%s/153UlZ/QqUn'Qd&1UhQl<.UpQn<Qh-\"F%c'TRQs:C>QpJQn<D-%c"L%c1-Qh\|Qh\'RQs:C>Qw"GC|153%pJ'>EX

कार्यक्रम, जो खुद को जगह में संशोधित करता है, नाम की फ़ाइल में सहेजा जाना चाहिए x। इसे कमांड के जरिए चलाया जा सकता है tecoc mung x.। बिंदु महत्वपूर्ण है; इसके बिना, TECO ने एक फ़ाइल का नाम खोजने का प्रयास किया x.tec। अनुगामी newline मौजूद होना चाहिए।

मुद्रण योग्य ASCII प्रतिबंध इस एक के लिए थोड़ा सा दर्द था, क्योंकि भाषा कई अप्राप्य पात्रों का उपयोग करती है। उनमें से अधिकांश को दो-बाइट अनुक्रम से एक कैरेट से शुरू किया जा सकता है, लेकिन "एस्केप" (एएससीआईआई 27) एक ऐसा चरित्र है जो 'अपरिहार्य' है, इसलिए इसे प्राप्त करने के लिए मुझे अपने एएससीआईआई मूल्य को एक स्ट्रिंग में रखना होगा। इसे निष्पादित करें। इस प्रकार, 4-बाइट में EBx<Esc>विस्फोट हो गया @^Ux#EBx#27@:^UX##Mx

इसे बहुत कम किया जा सकता है, विशेष रूप से कार्यक्रम को दो भागों में विभाजित करके, उन्हें स्ट्रिंग्स के रूप में संग्रहीत करना और केवल तब ही चलना जब दोनों मौजूद हों।

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