इंद्रधनुष के अंत में कोशिका


31

हम सभी जानते हैं, या कम से कम, ब्रेनफक के बारे में सुना है, सबसे प्रसिद्ध और प्रभावशाली गूढ़ भाषाओं में से एक है। जबकि इन दिनों अधिकांश कार्यान्वयन एक अनंत टेप का उपयोग करते हैं, शहरी मूलर द्वारा मूल संकलक में 30000 कोशिकाओं का एक टेप था। एक छोटा ज्ञात तथ्य * यह है कि टेप के अंत में वास्तव में एक विशेष मूल्य है, कुछ ऐसा जो लगभग एक विशिष्ट ब्रेनफॉक कार्यक्रम में कभी नहीं होता है।

जब आप 29,999 >और एक के साथ इस मूल्य को प्रिंट कर सकते हैं ., तो ब्रेनफॉक को इसके संक्षिप्त और संक्षिप्त समाधानों के लिए जाना जाता है, इसलिए आपका उद्देश्य इस मूल्य को न्यूनतम वर्णों के साथ प्रिंट करना है।

* कथा

नियम:

  • दिमागी निर्देश पर एक पुनश्चर्या:
    • +/ -: वर्तमान सेल में वृद्धि / वृद्धि, 255 से 0 तक लपेटना, जब 255 बढ़े और इसके विपरीत हो
    • </ >: टेप पर पॉइंटर को बाएँ / दाएँ घुमाएँ
    • .: वर्तमान सेल का मान प्रिंट करें।
    • [: ]सेल में मान 0 पर है, तो उसी पर जाएं
    • ]: [यदि सेल में मान 0 नहीं है तो संबंधित पर जाएं
  • इस मामले में ,(इनपुट प्राप्त करें) कुछ भी नहीं करता है, क्योंकि मूल संकलक ईओएफ पर सेल को अपरिवर्तित छोड़ देता है, और इस कार्यक्रम को कोई इनपुट नहीं मिलना चाहिए।
  • टेप शुरू में सेल 0,00 को छोड़कर सभी 0s से भरा होता है, जिसमें एक अज्ञात मूल्य होता है
  • पॉइंटर सेल 1 से शुरू होता है और इसे प्रिंट होने के बाद सेल 30000 पर समाप्त होना चाहिए।
  • 1 के बाईं ओर और 30000 के दाईं ओर की कोशिकाओं के पास अपरिभाषित व्यवहार है, इसलिए समाधानों को इन कोशिकाओं पर नहीं जाना चाहिए ।
  • ध्यान दें कि 30000 पर मूल्य है एक 0 हो सकता है, जब तक आप हिट एक गैर शून्य सेल काम नहीं करेगा तो बस पाशन।
  • आपको सेल 30000 पर केवल मूल्य प्रिंट करना चाहिए
  • सबसे छोटा समाधान जीतता है!
    • टाई-ब्रेकर अधिक कुशल कार्यक्रम (कम से कम चरणों में निष्पादित) है, इसके बाद सबसे तेज़ प्रस्तुत करने का समय है।

टिप: अपने कोड का परीक्षण करने के लिए Esolanging Fruit https://copy.sh/brainfuck का उपयोग करने का सुझाव देता है । चश्मा इस चुनौती में वर्णित हैं, और आप abortविकल्प का चयन कर सकते हैं ताकि आपका कार्यक्रम रुक जाए अगर यह सीमा से बाहर चला जाता है।



3
1 बाइट .:। मैं जीता।
फल

1
@EsolangingFruit मुझे मेरे भ्रम कृपया ...
जो राजा

1
मैं नियम बदलने का सुझाव देता हूं "शुरू में सभी कोशिकाओं का मान 0 होता है, अंतिम सेल को छोड़कर, जिनका कोई अज्ञात मूल्य है"।
user202729

4
ऐसा करने वाले किसी के लिए टिप: copy.sh/brainfuck ऐसा करने के लिए शायद सबसे अच्छी साइट है, क्योंकि यह BF को इस चुनौती में वर्णित के रूप में लागू करता है और डिफ़ॉल्ट रूप से 30k टेप है। टेप के अंत में दाईं ओर घूमने से दुभाषिया लटक जाता है।
फल

जवाबों:


17

५४ बाइट्स

------[>+++<--]>[->----[-[->+<]<[->+<]>>]<]>>>>>>>>>>.

119 x 252 = 29988. सीधा घोंसला पाश।

मैंने इस उपकरण का उपयोग यह सत्यापित करने के लिए किया कि सूचक 29999 पर रुकता है।


12

50 बाइट्स

>+[>+[<]>->+]>-<<[>>-------[[>]+[<]>-]<<-]>>>[>]>.

यह यहाँ की कोशिश करो!

पहला खंड ( >+[>+[<]>->+]>-<<) टेप को सेट करता है

0*12 121' 0 110

अगला खंड ( [>>-------[[>]+[<]>-]<<-]) 121 बार पुनरावृत्त होता है, 1जो हर बार टेप के अंत में 249 एस को जोड़ देता है। यदि आप गणित के साथ तेज़ हैं, तो आपको 30129 में इस 121 * 249 परिणामों का एहसास हो सकता है 1, लेकिन पहले पुनरावृत्ति में 110 से निपटने के लिए बचे हुए 110 हैं और केवल टेप के लिए संलग्न हैं ( 110-7) 103 1s, जिसका अर्थ केवल 29983 1s है। अंतिम टेप इस तरह दिखता है:

0*12 0' 0 0 1*29983 0 ???

और >>>[>]>.मूल्य को प्रिंट करने के लिए एक अंतिम ।

नोट के कुछ अन्य एल्गोरिदम:

  • 252 * 119 = 29988 (50 बाइट्स भी)
  • 163 * 184 = 29992 (56 बाइट्स)
  • 204 * 147 = 29988 (60 बाइट्स)
  • 153 * 196 = 29988 (56 बाइट्स)
  • 191 * 157 = 29987 (57 बाइट्स)
  • 254 * 118 = 29972 (56 बाइट्स)
    • यह वह है जिसे मैं 50 की धड़कन के अगले निकटतम मानता हूं, क्योंकि अतिरिक्त बाइट मूल रूप से सिर्फ अतिरिक्त दूरी की यात्रा कर रहे हैं। अगर मुझे एक एल्गोरिथ्म मिल सकता है जो 118 उत्पन्न करता है और 14 से अधिक कोशिकाओं की यात्रा करता है, तो यह इसे हरा सकता है।

3

81

-[+>+[<]>++]<<+[-->-[-<]>]>-[>[->+[[->+<]<]>>>]<[-<<+>>]<<<-]>-------[[->+<]>-]>.

यह 200 से अधिक बार 150 कोशिकाओं से आगे बढ़ता है।

यह जितना मैं चाहूंगा उससे कहीं अधिक लंबा है, और गोल्फिंग के लिए एक गंभीर बाधा है:

मुझे अब नहीं पता कि मैं क्यों काम करता हूं।

यह ऑफ-बायर्स के लिए क्षतिपूर्ति के साथ उस बिंदु पर लेट जाता है जहां उनमें से कुछ शायद रद्द कर सकते हैं। मैंने विभिन्न खंडों को इतना जोड़ दिया और हटा दिया है कि मुझे अब याद नहीं है कि मैंने कुछ चीजें क्यों रखी हैं, जहां वे हैं (उदाहरण के लिए, पहला भाग टेप कोशिकाओं को 199 और 151 को 200 और 150 के बजाय शुरू क्यों करता है?)।

इस विकटता के रास्ते में मेरा टिप्पणी संस्करण है, इस उम्मीद में कि मैं (या कोई और) उन्हें उपयोगी पा सकता है:

-[+>+[<]>++]<<+[-->-[-<]>]>-

0 0 0 199' 155

[
  n' k 0
  >[
    n k' j
    ->+[[->+<]<]>
    0' n k-1 j+1 OR
    n 0 0' j+1
    >>
  ]
  0*k n 0 0 k 0'
  <[-<<+>>]<<<-
  0*k n-1' k
]
>-------[[->+<]>-]>.

यह वास्तव में मूल्य को प्रिंट नहीं करता है, और यदि मूल्य सकारात्मक है तो यह ओवरफ्लो होता है। लेकिन एक महान प्रयास
जो किंग

फिर एक जोड़ें ., क्या यह मदद करेगा?
user202729

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