आप महान अच्छे के लिए एक रानी गोल्फ!


204

अपनी पसंद की भाषा का उपयोग करते हुए, एक क्वीन गोल्फ करें ।

एक क्वीन एक गैर-खाली कंप्यूटर प्रोग्राम है जो कोई इनपुट नहीं लेता है और केवल अपने आउटपुट के रूप में अपने स्वयं के स्रोत कोड की एक प्रति पैदा करता है।

कोई धोखा नहीं - इसका मतलब है कि आप स्रोत फ़ाइल को पढ़ नहीं सकते हैं और इसे प्रिंट नहीं कर सकते हैं। इसके अलावा, कई भाषाओं में, एक खाली फ़ाइल भी एक क्वीन है: जिसे कानूनी रूप से भी क्वीन नहीं माना जाता है।

कोई त्रुटि नहीं होती है - त्रुटि के लिए पहले से ही एक अलग चुनौती है

इसके लिए अंक:

  • सबसे छोटा कोड (बाइट्स में)
  • सबसे अधिक अस्पष्ट / अस्पष्ट समाधान
  • गूढ़ / अस्पष्ट भाषाओं का उपयोग करना
  • उन भाषाओं का सफलतापूर्वक उपयोग करना, जो गोल्फ में मुश्किल हैं

निम्नलिखित स्टैक स्निपेट का उपयोग प्रत्येक भाषा में वर्तमान स्कोर का एक त्वरित दृश्य प्राप्त करने के लिए किया जा सकता है, और इस प्रकार यह जानने के लिए कि किन भाषाओं के मौजूदा उत्तर हैं और आपको किस प्रकार के लक्ष्य को हराना है:


4
क्या आपका मतलब यह नहीं है, "गोल्फ आप एक रानी से अधिक अच्छे के लिए!"
मतीन उल्हाक

50
@ मंटू यह "ग्रेट यू के लिए एक हास्केल सीखें" पर एक नाटक है।
राफे केटलर

जवाबों:


106

हेक्सागोनी , साइड-लेंथ 17 16, 816 705 बाइट्स

180963109168843880558244491673953327577233938129339173058720504081484022549811402058271303887670710274969455065557883702369807148960608553223879503892017157337685576056512546932243594316638247597075423507937943819812664454190530214807032600083287129465751195839469777849740055584043374711363571711078781297231590606019313065042667406784753422844".".>.@.#.#.#.#.#.#.#.>.(...........................<.".......".".>./.4.Q.;.+.<.#.>...........................<.".....".".>.#.#.>.N.2.'.\.>.............=.=......._.<.".....".".>.>.;.'.=.:.\.>.......................<."...".".>.\.'.%.'.<.#.>..............._.....<."...".".>.#.#.>.<.#.>...............=.=.<.".".".>.#.\.'.R./.>.................<.".!.........../.>.

इसे ऑनलाइन आज़माएं!

यह वही है जो प्रकट होता है:

                1 8 0 9 6 3 1 0 9 1 6 8 8 4 3 8
               8 0 5 5 8 2 4 4 4 9 1 6 7 3 9 5 3
              3 2 7 5 7 7 2 3 3 9 3 8 1 2 9 3 3 9
             1 7 3 0 5 8 7 2 0 5 0 4 0 8 1 4 8 4 0
            2 2 5 4 9 8 1 1 4 0 2 0 5 8 2 7 1 3 0 3
           8 8 7 6 7 0 7 1 0 2 7 4 9 6 9 4 5 5 0 6 5
          5 5 7 8 8 3 7 0 2 3 6 9 8 0 7 1 4 8 9 6 0 6
         0 8 5 5 3 2 2 3 8 7 9 5 0 3 8 9 2 0 1 7 1 5 7
        3 3 7 6 8 5 5 7 6 0 5 6 5 1 2 5 4 6 9 3 2 2 4 3
       5 9 4 3 1 6 6 3 8 2 4 7 5 9 7 0 7 5 4 2 3 5 0 7 9
      3 7 9 4 3 8 1 9 8 1 2 6 6 4 4 5 4 1 9 0 5 3 0 2 1 4
     8 0 7 0 3 2 6 0 0 0 8 3 2 8 7 1 2 9 4 6 5 7 5 1 1 9 5
    8 3 9 4 6 9 7 7 7 8 4 9 7 4 0 0 5 5 5 8 4 0 4 3 3 7 4 7
   1 1 3 6 3 5 7 1 7 1 1 0 7 8 7 8 1 2 9 7 2 3 1 5 9 0 6 0 6
  0 1 9 3 1 3 0 6 5 0 4 2 6 6 7 4 0 6 7 8 4 7 5 3 4 2 2 8 4 4
 " . " . > . @ . # . # . # . # . # . # . # . > . ( . . . . . .
  . . . . . . . . . . . . . . . . . . . . . < . " . . . . . .
   . " . " . > . / . 4 . Q . ; . + . < . # . > . . . . . . .
    . . . . . . . . . . . . . . . . . . . . < . " . . . . .
     " . " . > . # . # . > . N . 2 . ' . \ . > . . . . . .
      . . . . . . . = . = . . . . . . . _ . < . " . . . .
       . " . " . > . > . ; . ' . = . : . \ . > . . . . .
        . . . . . . . . . . . . . . . . . . < . " . . .
         " . " . > . \ . ' . % . ' . < . # . > . . . .
          . . . . . . . . . . . _ . . . . . < . " . .
           . " . " . > . # . # . > . < . # . > . . .
            . . . . . . . . . . . . = . = . < . " .
             " . " . > . # . \ . ' . R . / . > . .
              . . . . . . . . . . . . . . . < . "
               . ! . . . . . . . . . . . / . > .
                . . . . . . . . . . . . . . . .

आह ठीक है, यह काफी भावनात्मक रोलरकोस्टर था ... मैंने "हाहा, यह पागलपन है" और "रुको, अगर मैं ऐसा करता हूं तो यह वास्तव में काफी उचित होना चाहिए " के बीच मैंने कितनी बार स्विच किया, इसकी गिनती बंद कर दी । हेक्सागोनी के लेआउट नियमों द्वारा कोड पर लगाए गए अवरोध थे ... गंभीर।

सामान्य दृष्टिकोण को बदलने के बिना साइड-लेंथ को 1 या 2 से कम करना संभव हो सकता है, लेकिन यह कठिन होने वाला है (केवल #वर्तमान में अप्रयुक्त और डिकोडर के लिए उपलब्ध कोशिकाओं के साथ )। फिलहाल मेरे पास भी बिल्कुल कोई विचार नहीं है कि कैसे अधिक कुशल दृष्टिकोण के लिए छोड़ दिया जाए, लेकिन मुझे यकीन है कि एक मौजूद है। मैं इसे अगले कुछ दिनों में कुछ सोचकर दूंगा और शायद एक तरफ की लंबाई और इससे पहले कि मैं एक स्पष्टीकरण और सब कुछ जोड़ दूं।

खैर कम से कम, मैंने साबित कर दिया है कि यह संभव है ...

मेरे स्वयं के भविष्य के संदर्भ के लिए कुछ सीजेएम स्क्रिप्ट:


51
प्रिय पीट यह क्या है।
कॉनर ओ'ब्रायन

2
इसे बनाने में कितना समय लगा?
अदनान

3
@AandN मैं कल से एक सामान्य "टेम्पलेट" के लिए अवधारणाओं के साथ खेल रहा हूं और फिर (जो कि किसी भी वास्तविक परीक्षण में शामिल नहीं था ... सिर्फ 7x7 ग्रिड पर कुछ सामान टाइप करना और यह देखना कि क्या यह काम कर सकता है .. (मैंने पहले से ही आधा दर्जन दृष्टिकोणों को त्याग दिया)। वास्तविक कोडिंग के बाद शाम हो गई ... शायद 3 घंटे, मैं कहूंगा।
मार्टिन एंडर

10
शब्द यह नहीं बता सकते हैं कि जब मैं एस्कॉटरिक आईडीई के साथ कदम से कदम मिलाकर इसे देख रहा हूं तो मैं कितना हैरान हूं ... यह समझने के लिए कि यह हेक्सागन "डिकोडर" भाग को एक पूर्णांक में किसके साथ मुद्रित करता है !और फिर एक के साथ मुद्रित करता है /द्वितीय अंतिम पंक्ति पर दर्पण यह डिकोडर को क्वीन को पूरा करने के लिए डिकोडर कोड प्रिंट करने के लिए प्रवेश करता है। इसका एक चमत्कारी उपयोग है <और >जो बहुस्तरीय बहुत बड़े पूर्णांक को पढ़ता है और डिकोडर के भंडारण के लिए क्षेत्र का निर्माण करता है। मैं वास्तव में जानना चाहूंगा कि "दर्जनों दृष्टिकोण" पर क्या विचार किया जा रहा है?
सनी पुण

3
स्पष्टीकरण? ---
एमडी एक्सएफ


72

गोल्फस्क्रिप्ट, 2 बाइट्स

1

(नोट अनुगामी न्यूलाइन) यह नंबर 1 को स्टैक पर धकेलता है। कार्यक्रम के अंत में, गोल्फस्क्रिप्ट स्टैक में सभी वस्तुओं को प्रिंट करता है (बीच में कोई रिक्त स्थान नहीं है), फिर एक नई रेखा प्रिंट करता है।

यह एक सच्ची क्वीन है (जैसा कि प्रश्न में सूचीबद्ध है), क्योंकि यह वास्तव में कोड निष्पादित करता है; यह सिर्फ "स्रोत फ़ाइल नहीं पढ़ता है और इसे प्रिंट करता है" (PHP सबमिशन के विपरीत)।


एक अन्य उदाहरण के लिए, यहां एक गोल्फस्क्रिप्ट प्रोग्राम प्रिंट करना है 12345678:

9,(;
  1. 9: स्टैक पर 9 पुश करें
  2. ,: एक तर्क के रूप में 9 का उपभोग करें, सरणी [0 1 2 3 4 5 6 7 8]को स्टैक पर धकेलें
  3. (: एक तर्क के रूप में सरणी का उपभोग करें, सरणी [1 2 3 4 5 6 7 8]और आइटम 0को स्टैक पर धक्का दें
  4. ;: स्टैक के शीर्ष आइटम को त्यागें

स्टैक में अब सरणी है [1 2 3 4 5 6 7 8]। यह तत्वों के बीच कोई रिक्त स्थान के साथ मानक आउटपुट के लिए लिखा जाता है, उसके बाद एक नई पंक्ति।


18
या पावरशेल, या PHP :-)
जॉय

6
आप समय पर वापस नहीं गए और आविष्कारक को गोल्फस्क्रिप्ट का आविष्कार करने का विचार दिया, क्या आपने?
मतीन उलहाक

78
तकनीकी रूप से, 1गोल्फस्क्रिप्ट में एक क्वीन नहीं है: यह आउटपुट करता है 1\n, जहां \nएक नई रेखा को दर्शाता है। हालांकि, दो चार कार्यक्रम 1\n है एक Quine।
इल्मरी करोनें

17
एक-चार कार्यक्रम \nभी शायद है?
लिन

10
@ छद्म नाम का शाब्दिक अर्थ एक कार्यक्रम है जो अपने स्वयं के स्रोत को प्रिंट करता है। मुझे नहीं लगता कि "संरचना" पर कोई मनमाना प्रतिबंध है।
ह्यूगो जिंक

71

ब्रेन-फ्लैक , 9.8e580 1.3e562 9.3e516 12818 11024 4452 4332 4240 4200 4180 3852 3656 3616 3540 2485 + 3 = 2488 बाइट्स

अब देखने योग्य ब्रह्मांड में फिट बैठता है!

(())(()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(()()()()())(())(())(())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(()()()()())(())(())(())(())(())(())(()())(())(())(())(()())(()()()())(())(()()()()())(()())(()())(()())(()()())(())(()())(())(()()()()())(()())(()()()()())(())(())(())(())(())(()())(())(())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(()())(()())(()())(()())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(()()())(()())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(())(())(()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(()()())(())(()()())(())(())(())(()())(()()())(()())(())(()()()()())(()())(())(()()())(())(()()()()())(())(())(())(()()())(())(())(())(()())(())(()())(()()()())(())(())(()()()()())(()())(()())(())(()()())(())(())(())(())(()()())(()())(())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()())(())(()()()()())(()()()()())(())(()()())(())(())(()())(())(()()()()())(())(()()()()())(())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(()()()()())(())(()()()()())(())(())(())(()())(())(()()()()())(())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()()()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(())(()())(()()()())(())(())(()())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(()())(()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(()()())(())(())(()())(())(())(()()()()())(()()()())(()())(()())(()()())(())(()())(())(()()()()())(()())(()()()()())(())(())(())(()()()())(()()()())(()())([[]]){({}()<(([{}]())<{({}())<>(((((()()()()()){}){}){}())[()])<>{({}())<>{}({}(((()()()){}())){}{})<>{({}())<>({}(((()()()()()){})){}{}())<>{{}<>({}(((()()()()){}){}){})(<>)}}<>(({})[()()])<>}}{}<>({}(<()>)<><{({}<>)<>}<>>){({}<>)<>}{}(<>)<>{({}<>)<>}{}(((((((()()()()()){}){}){}))()))>){({}()<((({}[()])()))>)}{}<>{({}<>)<>}{}>)}{}<>{({}<>)<>}<>

इसे ऑनलाइन आज़माएं!


व्याख्या

यह क्वाइन गूढ़ भाषाओं में सबसे अधिक Quines की तरह काम करता है; इसके दो भाग हैं एक एनकोडर और एक डिकोडर। एनकोडर शुरुआत में सभी कोष्ठकों का है और डिकोडर बहुत ही अंत में अधिक जटिल हिस्सा है।

कार्यक्रम को एन्कोड करने का एक भोली तरीका डिकोडर में प्रत्येक वर्ण के ASCII मान को स्टैक पर रखना होगा। यह बहुत अच्छा विचार नहीं है क्योंकि ब्रेन-फ्लैक केवल 8 अक्षरों ( ()<>[]{}) का उपयोग करता है, इसलिए आप बहुत कम जानकारी का एनकोड करने के लिए काफी बाइट्स का भुगतान करते हैं। एक होशियार विचार, और अब तक इस्तेमाल किए गए 8 ब्रेसरों में से प्रत्येक को बहुत छोटी संख्या (1-8) के साथ असाइन करना है और इन्हें हमारे डिकोडर के साथ ASCII मूल्यों में बदलना है। यह अच्छा है क्योंकि यह एक चरित्र को सांकेतिक शब्दों में बदलना करने के लिए 18 से अधिक बाइट्स की लागत नहीं है जैसा कि पहले 252 के विपरीत था।

हालांकि यह कार्यक्रम न तो करता है। यह इस तथ्य पर निर्भर करता है कि ब्रेन-फ्लैक प्रोग्राम सभी को 8 ब्रेसिज़ को एन्कोड करने के लिए संतुलित किया जाता है। 5. यह उन्हें निम्नानुसार एनकोड करता है।

(       -> 2
<       -> 3
[       -> 4
{       -> 5
),>,],} -> 1

सभी करीबी ब्रेसिज़ को 1 सौंपा गया है क्योंकि हम संदर्भ का उपयोग यह निर्धारित करने के लिए कर सकते हैं कि हमें उनमें से किसका उपयोग किसी विशेष परिदृश्य में करना है। यह एक ब्रेन-फ्लैक कार्यक्रम के लिए चुनौतीपूर्ण काम की तरह लग सकता है, लेकिन यह वास्तव में नहीं है। उदाहरण के लिए खुले ब्रेसिज़ के साथ निम्नलिखित एनकोडिंग को डीकोड किया गया और नज़दीकी ब्रेसिज़ को एक के साथ बदल दिया गया .:

(.
((..
<([.{...

उम्मीद है कि आप देख सकते हैं कि एल्गोरिथ्म बहुत सरल है, हम बाएं से दाएं पढ़ते हैं, हर बार जब हम एक खुले ब्रेस का सामना करते हैं तो हम इसके करीब के ब्रेस को एक काल्पनिक स्टैक पर धकेल देते हैं और जब हम मुठभेड़ करते हैं .तो हम शीर्ष मान को पॉप करते हैं और इसे जगह में रखते हैं। .। यह नया एन्कोडिंग हमें एनकोडर में भारी संख्या में बाइट्स बचाता है, जबकि केवल डिकोडर पर हमें मुट्ठी भर बाइट्स खो देता है।

निम्न स्तर की व्याख्या

कार्य प्रगति पर है


25
मुझे लगता है कि आप एक कोड गोल्फ चुनौती के लिए सबसे लंबे समय तक समाधान के लिए जीतने के लिए ...
Mego

18
पीपीसीजी नोप के इतिहास में सबसे बड़ा एकल गोल्फ बना 9.8e580 अभी भी प्रभावशाली है।
डेनिस

19
अवलोकनीय ब्रह्मांड में फिटिंग के लिए +1। इसके अलावा, TIO Nexus के साथ, पर्मलिंक उत्तर में फिट होना चाहिए। tio.run/nexus/…
डेनिस

3
... बहुत बड़ा गोल्फ ...
विनाशकारी नींबू

3
मुझे लगता है कि आप सबसे अधिक बाइट्स के लिए जीते हैं
क्रिस्टोफर

68

प्रस्तावना , 5157 4514 2348 1761 1537 664 569 535 423 241 214 184 178 175 169 148 142 136 133 बाइट्स

3 बाइट बचाने के लिए Sp3000 के लिए धन्यवाद।

यह लंबे समय तक है ... (ठीक है, यह अभी भी लंबा है ... कम से कम यह इस चुनौती पर अब तक के सबसे कम ज्ञात ब्रेनफक सी # क्वीन की पिटाई कर रहा है ) लेकिन यह पहली क्वीन है जिसे मैंने खुद खोजा था (मेरा लुआ और जूलिया प्रस्तुतियाँ वास्तव में सिर्फ अनुवाद हैं अन्य भाषाओं में मानक क्वीन तकनीक) और जहां तक ​​मुझे पता है कि किसी ने प्रील्यूड में अब तक एक क्वीन नहीं लिखा है, इसलिए मुझे वास्तव में इस पर गर्व है। :)

7( -^^^2+8+2-!( 6+ !
  ((#^#(1- )#)8(1-)8)#)4337435843475142584337433447514237963742423434123534455634423547524558455296969647344257)

बड़ी संख्या में अंक कोर कोड का सिर्फ एक एन्कोडिंग है, यही वजह है कि क्वीन इतनी लंबी है।

इस सीजेएम स्क्रिप्ट के साथ क्वीन को एन्कोडिंग करने वाले अंक उत्पन्न हुए हैं ।

इसके लिए एक मानक-अनुरूप दुभाषिया की आवश्यकता होती है, जो वर्णों को अंकित करता है (वर्ण कोड के रूप में मूल्यों का उपयोग करके)। इसलिए यदि आप पायथन इंटरप्रेटर का उपयोग कर रहे हैं तो आपको सेट करना होगा NUMERIC_OUTPUT = False

व्याख्या

सबसे पहले, Prelude के बारे में कुछ शब्द: Prelude में प्रत्येक पंक्ति एक अलग "आवाज़" है जो अपने स्वयं के ढेर को हेरफेर करती है। ये ढेर 0 की एक अनंत संख्या के लिए आरंभिक हैं। कार्यक्रम को कॉलम द्वारा निष्पादित किया जाता है, जहां कॉलम में सभी कमांड पिछले स्टैक स्टेट्स के आधार पर "एक साथ" निष्पादित होते हैं। अंकों को व्यक्तिगत रूप से स्टैक पर धकेला जाता है, इसलिए 42ए धक्का देगा 4, फिर ए 2। बड़ी संख्या को सीधे पुश करने का कोई तरीका नहीं है, आपको उन्हें जोड़ना होगा। मानों को आसन्न ढेर से कॉपी किया जा सकता है vऔर ^। ब्रेनफक-स्टाइल लूप्स को कोष्ठक के साथ पेश किया जा सकता है। अधिक जानकारी के लिए शीर्षक में लिंक देखें।

यहाँ क्वीन का मूल विचार है: पहले हम स्टैक पर अंकों का भार बढ़ाते हैं जो कि क्वीन के मूल को कूटबद्ध करता है। कहा गया कि कोर फिर उन अंकों को लेता है, उन्हें खुद प्रिंट करने के लिए डिकोड करता है और फिर अंकों को प्रिंट करता है जैसा कि वे कोड (और अनुगामी )) में दिखाई देते हैं ।

यह इस तथ्य से थोड़ा जटिल है कि मुझे कई लाइनों पर कोर को विभाजित करना पड़ा। मूल रूप से मेरे पास शुरू में एन्कोडिंग थी, लेकिन फिर समान स्थानों के साथ अन्य लाइनों को पैड करने की आवश्यकता थी। यही कारण है कि शुरुआती स्कोर इतने बड़े थे। अब मैंने एन्कोडिंग को अंत में डाल दिया है, लेकिन इसका मतलब है कि मुझे पहले कोर को छोड़ना होगा, फिर अंकों को धक्का देना होगा, और शुरुआत में वापस कूदना होगा और प्रिंटिंग करना होगा।

एन्कोडिंग

चूंकि कोड में केवल दो स्वर हैं, और आसन्न चक्रीय है, ^और vपर्यायवाची हैं। यह अच्छा है क्योंकि vअब तक का सबसे बड़ा चरित्र कोड है, इसलिए इसे हमेशा उपयोग करने से बचना ^एन्कोडिंग को सरल बनाता है। अब सभी वर्ण कोड १० से ९ ४ के दायरे में हैं। इसका मतलब है कि मैं प्रत्येक चरित्र को दो दशमलव अंकों के साथ एन्कोड कर सकता हूं। हालांकि एक समस्या है: कुछ वर्ण, विशेष रूप से लाइनफीड, उनके दशमलव प्रतिनिधित्व में एक शून्य है। यह एक समस्या है क्योंकि शून्य स्टैक के नीचे से आसानी से अलग नहीं होते हैं। सौभाग्य से इसके लिए एक सरल निर्धारण है: हम वर्ण कोड को ऑफसेट करते हैं 2, इसलिए हमारे पास 12 से 96 तक की सीमा है, समावेशी है, जो अभी भी आराम से दो दशमलव अंकों में फिट बैठता है। अब सभी वर्ण जो प्रस्तावना कार्यक्रम में दिखाई दे सकते हैं,0इसके प्रतिनिधित्व (0) में 0 है, लेकिन हमें वास्तव में बिल्कुल भी ज़रूरत नहीं है 0। तो वह एन्कोडिंग मैं उपयोग कर रहा हूं, प्रत्येक अंक को व्यक्तिगत रूप से धकेलना।

हालाँकि, जब से हम एक स्टैक के साथ काम कर रहे हैं, अभ्यावेदन रिवर्स में धकेल दिए जाते हैं। तो अगर आप एन्कोडिंग के अंत में देखते हैं:

...9647344257

जोड़े में विभाजित करें और रिवर्स करें, फिर दो को घटाएं, और फिर वर्ण कोड देखें:

57 42 34 47 96
55 40 32 45 94
 7  (     -  ^

जहां 32रिक्त स्थान से मेल खाती है। कोर बिल्कुल इस परिवर्तन को करता है, और फिर पात्रों को प्रिंट करता है।

कोर

तो आइए देखें कि ये संख्याएँ वास्तव में कैसे संसाधित होती हैं। सबसे पहले, यह ध्यान रखना महत्वपूर्ण है कि मेल खाते हुए कोष्ठक Prelude में एक ही पंक्ति में नहीं हैं। प्रति कॉलम केवल एक कोष्ठक हो सकता है, इसलिए कोई अस्पष्टता नहीं है जिसमें कोष्ठक एक साथ हों। विशेष रूप से, समापन कोष्ठक की ऊर्ध्वाधर स्थिति हमेशा अप्रासंगिक होती है - स्टैक जिसे यह निर्धारित करने के लिए जांचा जाता है कि क्या लूप समाप्त हो गया है (या पूरी तरह से छोड़ दिया गया है) हमेशा वह होगा जो है (

हम कोड को ठीक दो बार चलाना चाहते हैं - पहली बार, हम कोर को छोड़ देते हैं और अंत में सभी नंबरों को धक्का देते हैं, दूसरी बार जब हम कोर चलाते हैं। वास्तव में, हमने कोर को चलाने के बाद, हम उन सभी नंबरों को फिर से आगे बढ़ाएंगे, लेकिन चूंकि लूप बाद में समाप्त हो जाता है, इसलिए यह अप्रासंगिक है। यह निम्नलिखित कंकाल देता है:

7(
  (                   )43... encoding ...57)

सबसे पहले, हम 7पहली आवाज़ पर धक्का देते हैं - अगर हम ऐसा नहीं करते हैं, तो हम कभी भी लूप में प्रवेश नहीं करेंगे (कंकाल के लिए यह केवल महत्वपूर्ण है कि यह गैर-शून्य है ... यह विशेष रूप से 7हम बाद में क्यों देखेंगे) । फिर हम मुख्य लूप में प्रवेश करते हैं। अब, दूसरी आवाज में एक और लूप होता है। पहले पास पर, यह लूप छोड़ दिया जाएगा क्योंकि दूसरा स्टैक खाली है / जिसमें केवल 0s शामिल हैं। तो हम सीधे एन्कोडिंग पर कूदते हैं और उन सभी अंकों को स्टैक पर धकेलते हैं। 7हम पहले ढेर पर धक्का दे दिया अभी भी वहाँ है, इसलिए पाश दोहराता है।

इस बार, 7दूसरी स्टैक पर भी है , इसलिए हम दूसरी आवाज पर लूप दर्ज करते हैं। दूसरी आवाज़ पर लूप को इस तरह से डिज़ाइन किया गया है कि स्टैक अंत में फिर से खाली हो, इसलिए यह केवल एक बार चलता है। यह पहली स्टैक को भी समाप्त कर देगा ... इसलिए जब हम दूसरी आवाज पर लूप छोड़ते हैं, तो हम सभी अंकों को फिर से धक्का देते हैं, लेकिन अब 7पहले स्टैक पर छोड़ दिया गया है, इसलिए मुख्य लूप समाप्त हो जाता है और प्रोग्राम समाप्त हो जाता है।

अगला, चलो वास्तविक कोर में पहले लूप को देखें। एक साथ एक ही समय काम करना (या )काफी रोचक है। मैंने यहाँ लूप बॉडी को चिह्नित किया है =:

-^^^2+8+2-!
(#^#(1- )#)
 ==========

इसका मतलब है कि कॉलम वाले (को लूप का हिस्सा नहीं माना जाता है (वहां वर्ण केवल एक बार निष्पादित होते हैं, और भले ही लूप छोड़ दिया जाता है)। लेकिन स्तंभ युक्त लूप ) का हिस्सा है और प्रत्येक पुनरावृत्ति पर एक बार चलाया जाता है।

तो हम एक एकल के साथ शुरू करते हैं -, जो 7पहले स्टैक को एक में बदल देता है -7... फिर से, बाद में और अधिक। वास्तविक पाश के लिए के रूप में ...

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

^^^
#^#

पहला कॉलम 1-अंक को पहली आवाज़ में ले जाता है। दूसरा कॉलम 1-अंकों को दूसरी आवाज में वापस कॉपी करते हुए पहली आवाज में 10 अंकों की नकल करता है। तीसरा कॉलम चलता है जो पहली आवाज़ में वापस कॉपी करता है। इसका मतलब है कि पहली आवाज़ में अब दो-अंक और बीच में 10-अंक हैं। दूसरी आवाज में केवल 10 अंकों की एक और प्रति है। इसका मतलब है कि हम स्टैक्स के शीर्ष पर मूल्यों के साथ काम कर सकते हैं और सुनिश्चित करें कि बाद के लिए पहले स्टैक पर दो प्रतियां शेष हैं।

अब हम दो अंकों से वर्ण कोड को पुनर्प्राप्त करते हैं:

2+8+2-!
(1- )#

नीचे एक छोटा सा लूप है जो 10 अंकों के शून्य को घटाता है। प्रत्येक पुनरावृत्ति के लिए हम शीर्ष में 10 जोड़ना चाहते हैं। याद रखें कि पहला 2लूप का हिस्सा नहीं है, इसलिए लूप बॉडी वास्तव में +8+210 है जो (का उपयोग करके) जोड़ता है2 पहले धकेल दिया गया है) और दूसरा धक्का देता है। इसलिए जब हम लूप के साथ होते हैं, तो पहले स्टैक में वास्तव में आधार होता है- 10 मान और दूसरा 2. हम -एन्कोडिंग में ऑफसेट के लिए खाते के साथ उस 2 को घटाते हैं और चरित्र को प्रिंट करते हैं !#बस नीचे पाश के अंत में शून्य छोड़ देता है।

एक बार जब यह लूप पूरा हो जाता है, तो दूसरा स्टैक खाली होता है और पहला स्टैक सभी अंकों को रिवर्स ऑर्डर (और ए) में रखता है -7 सबसे नीचे) । बाकी काफी सरल है:

( 6+ !
8(1-)8)#

यह कोर का दूसरा लूप है, जो अब सभी अंकों को वापस प्रिंट करता है। ऐसा करने के लिए हमें इसके सही वर्ण कोड को प्राप्त करने के लिए प्रत्येक अंक के लिए 48 की आवश्यकता है। हम एक साधारण लूप के साथ ऐसा करते 8हैं जो 6हर बार चलता है और हर बार जुड़ता है । परिणाम के साथ मुद्रित किया जाता है !और 8अंत में अगले पुनरावृत्ति के लिए होता है।

तो किस बारे में -7? हाँ, 48 - 7 = 41जो के चरित्र कोड है )। जादू!

अंत में, जब हम उस लूप के साथ हो जाते हैं, तो हम यह सुनिश्चित करने के लिए कि हम दूसरी आवाज पर बाहरी लूप छोड़ते हैं, के 8साथ धक्का दिया #। हम सभी अंकों को फिर से धक्का देते हैं और कार्यक्रम समाप्त हो जाता है।



19
मार्टिन, तुम कहीं रुक जाओगे।
seequ

3
मुझे लगता है कि यह कुल मिलाकर 5000 से अधिक बाइट्स हैं, जिनमें से 3 को बचाने के लिए Sp3000 को एक पावती।
कामिल दकरी

2
@KamilDrakari हालांकि वे आखिरी 3 बाइट्स थे, इसलिए यह काफी बड़ी बात है। ;)
मार्टिन एंडर

57

हेक्सागोनी , साइड की लंबाई 11, 314 बाइट्स

164248894991581511673077637999211259627125600306858995725520485910920851569759793601722945695269172442124287874075294735023125483.....!/:;.........)%'=a':\....................\...................\..................\.................\................\...............\..............\..$@.........\$><>'?2='%.<\:;_;4Q

इसे ऑनलाइन आज़माएं!


पुराना संस्करण:

हेक्सागोनी , साइड की लंबाई 11, 330 बाइट्स

362003511553420961423766261426252539048636523959468260999944549820033581478284471415809677091006384959302453627348235790194699306179..../:{;+'=1P'%'a{:..\.....................\...................\..................\.................\................\...............\..............\.............\!$><........\..@>{?2'%<......:;;4Q/

इसे ऑनलाइन आज़माएं!

एनकोडर: इसे ऑनलाइन आज़माएं!

कार्यक्रम लगभग इस पायथन कोड के बराबर है: इसे ऑनलाइन आज़माएं!

अनकहा कोड:

           3 6 2 0 0 3 5 1 1 5 5
          3 4 2 0 9 6 1 4 2 3 7 6
         6 2 6 1 4 2 6 2 5 2 5 3 9
        0 4 8 6 3 6 5 2 3 9 5 9 4 6
       8 2 6 0 9 9 9 9 4 4 5 4 9 8 2
      0 0 3 3 5 8 1 4 7 8 2 8 4 4 7 1
     4 1 5 8 0 9 6 7 7 0 9 1 0 0 6 3 8
    4 9 5 9 3 0 2 4 5 3 6 2 7 3 4 8 2 3
   5 7 9 0 1 9 4 6 9 9 3 0 6 1 7 9 . . .
  . / : { ; + ' = 1 P ' % ' a { : . . \ .
 . . . . . . . . . . . . . . . . . . . . \
  . . . . . . . . . . . . . . . . . . . \ 
   . . . . . . . . . . . . . . . . . . \  
    . . . . . . . . . . . . . . . . . \   
     . . . . . . . . . . . . . . . . \    
      . . . . . . . . . . . . . . . \     
       . . . . . . . . . . . . . . \      
        . . . . . . . . . . . . . \       
         ! $ > < . . . . . . . . \        
          . . @ > { ? 2 ' % < . .         
           . . . . : ; ; 4 Q / .          

दो . एस 1 बिट लेता है। कोई भी अन्य वर्ण 1 बिट और आधार -97 अंक लेता है।

व्याख्या

बड़े आकार के लिए छवियों पर क्लिक करें। प्रत्येक स्पष्टीकरण भाग में समझने में मदद करने के लिए इसी पायथन कोड है।

डेटा भाग

कुछ अन्य उत्तरों (साथ <, "और कुछ अन्य चीजों) में उपयोग की जाने वाली जटिल संरचना के बजाय , मैंने सिर्फ आईपी को निचले आधे हिस्से से गुजरने दिया।

डेटा

सबसे पहले, आईपी बहुत अधिक संख्या और नो-ऑप्स ( .) और दर्पण ( \) के माध्यम से चलता है । प्रत्येक अंक मेमोरी में संख्या के लिए लागू होता है, इसलिए अंत में मेमोरी मूल्य कार्यक्रम की शुरुआत में संख्या के बराबर होता है।

mem = 362003511...99306179

! इसे प्रिंट करता है,

stdout.write(str(mem))

और $अगले के माध्यम से कूदता है>

से शुरू <। यदि स्मृति मान memगलत है ( <= 0यानी, स्थिति mem > 0संतुष्ट नहीं है), हमने प्रोग्राम को प्रिंट किया है, और बाहर निकलना चाहिए। IP ऊपरी पथ का अनुसरण करेगा।

बाहर जाएं

(आइए, आईपी को मारने से पहले लगभग 33 कमांड के लिए दुनिया भर में चलते हैं@ (जो प्रोग्राम को समाप्त करता है) को क्योंकि इसे कहीं और लगाने से कुछ अतिरिक्त बाइट्स होते हैं)

यदि यह सही है, तो हम निम्न पथ का अनुसरण करते हैं, कुछ समय के लिए पुनर्निर्देशित होते हैं और किसी अन्य सशर्त को मारने से पहले कुछ और कमांड निष्पादित करते हैं।

# Python                    # Hexagony
# go to memory cell (a)     # {
a = 2                       # ?2
# go to memory cell (b)     # '
b = mem % a                 # %

अब स्मृति इस तरह दिखती है:

Mem1

यदि मान सत्य है:

if b > 0:

निम्नलिखित कोड निष्पादित किया गया है:

# Python                    # Hexagony
b = ord('Q')                # Q
b = b*10+4                  # 4
# Note: now b == ord('.')+256*3
stdout.write(chr(b%256))    # ;
stdout.write(chr(b%256))    # ;

मार्टिनएंडर के हेलवर्ल्ड हेक्सागोनी उत्तरQ4 पर विस्तृत विवरण देखें । संक्षेप में, यह कोड प्रिंट करता है. दो बार ।

मूल रूप से मैंने इसके लिए .एक बार प्रिंट करने की योजना बनाई थी । जब मैं इस (प्रिंट) के साथ आया. दो बार ) किया और इसे लागू किया, तो लगभग 10 अंक बच गए।

फिर,

b = mem // a                # :

यहाँ एक महत्वपूर्ण तथ्य है जो मैंने महसूस किया कि मुझे 14 अंकों के बारे में बचाया गया है: आपको उस स्थान पर रहने की आवश्यकता नहीं है जहाँ आपने शुरुआत की थी।


समझने के लिए कि मैं क्या कह रहा हूं, चलो एक बीएफ सादृश्य है। (यदि आप पहले ही समझ गए हैं तो इसे छोड़ दें)

कोड दिया

while a != 0:
    b, a = a * 2, 0
    a, b = b, 0
    print(a)

मान लें कि हम aवर्तमान सेल bका मान रखते हैं और सही सेल का मान हो, तो इसका सीधा अनुवाद BF में होता है:

[             # while a != 0:
    [->++<]       # b, a = a * 2, 0
    >[-<+>]       # a, b = b, 0
    <.            # print(a)
]

हालांकि, ध्यान दें कि हमें कार्यक्रम के दौरान हर समय एक ही स्थिति में रहने की आवश्यकता नहीं है। हम aप्रत्येक पुनरावृत्ति के प्रारंभ में जो कुछ भी हैं, उसका मान दे सकते हैं, फिर हमारे पास यह कोड है:

[             # while a != 0:
    [->++<]       # b, a = a * 2, 0
                  # implicitly let (a) be at the position of (b) now
    .             # print(a)
]

जो कई बाइट्स कम है।


इसके अलावा, कोने में लपेटने वाला व्यवहार भी मुझे \वहां एक दर्पण होने से बचाता है - इसके बिना मैं अंकों को फिट नहीं कर पाऊंगा ( \स्वयं के लिए +2 अंक और एक अनपेक्षित के लिए +2 अंक). इसके दाईं ओर के , इसके अधिकार के लिए नहीं। झंडे)

(विवरण:

  • IP बाईं ओर निचले-बाएँ कोने में प्रवेश करती है
  • यह दाहिने कोने में जाता है, फिर भी सिर छोड़ दिया जाता है
  • इसका सामना ए \ जो इसे दर्शाता है, अब यह सही-सलामत है
  • यह कोने में चला जाता है और निचले-बाएँ कोने में फिर से विकृत हो जाता है

)


यदि मान (ऊपर मॉड 2 ऑपरेशन का) मिथ्या (शून्य) है, तो हम इस पथ का अनुसरण करते हैं:

# Python                 # Hexagony   # Memory visualization after execution
b = mem // a             # :          # click here
base = ord('a') # 97     # a
y = b % base             # '%
offset = 33              # P1
z = y + offset           # ='+
stdout.write(chr(z))     # ;          # click here
mem = b // base          # {:         # click here

मैं यहाँ बहुत विस्तृत व्याख्या नहीं करूँगा, लेकिन ऑफसेट वास्तव में बिल्कुल नहीं है 33, लेकिन 33आधुनिक माध्यम से बधाई है 256। और chrएक निहित है % 256


3
यार, वह बहुत सारे नो-ऑप्स हैं
जो किंग

26
मुझे हंसी आई "यह समझने के लिए कि मैं क्या कह रहा हूं, चलो एक [ब्रेनफक] सादृश्य है।" केवल PPCG पर ... :)
लिन

2
मैंने उत्तर को ऊपर करने के लिए इसे 3 बार स्क्रॉल किया, केवल यह पता लगाने के लिए कि मैंने इसे पहले ही कर लिया था ...
NieDzejkob

2
संख्या को छोटा करने से नई जगह का फायदा उठाकर 310 बाइट्स
जो किंग

2
308 बाइट्स और भी अधिक स्थान निकालकर
जो किंग

46

विम, 11 बाइट्स

q"iq"qP<Esc>hqP
  • iq"qP<Esc>: मैन्युअल रूप से पाठ का एक डुप्लिकेट डालें जो रिकॉर्डिंग के बाहर होना चाहिए
  • q"और hqP: सीधे अनाम ""रजिस्टर में अंदर रिकॉर्ड करें , इसलिए इसे बीच में चिपकाया जा सकता है। hकेवल पुनः स्थिति के लिए आवश्यक है, यदि आप इसे मैक्रो के अंदर रखते हैं, तो इसे परिणाम में चिपकाया जाएगा।

संपादित करें

के साथ रिकॉर्डिंग के बारे में एक नोट q": अनाम रजिस्टर ""एक अजीब बात है। यह वास्तव में दूसरों की तरह एक सच्चा रजिस्टर नहीं है, क्योंकि पाठ वहाँ संग्रहीत नहीं है। यह वास्तव में कुछ अन्य रजिस्टर के लिए एक संकेतक है (आमतौर पर "-कोई नई लाइन के साथ "0डिलीट करने के लिए, यांक्स के लिए, या "1नई एयरलाइन के साथ हटाने के लिए)। q"नियम तोड़ता है; यह वास्तव में लिखता है "0। यदि आपका ""पहले से ही कुछ रजिस्टर की ओर इशारा कर रहा है "0, q"तो ओवरराइट "0कर देंगे लेकिन ""अपरिवर्तित छोड़ देंगे । जब आप एक नया विम शुरू करते हैं, ""स्वचालित रूप से इंगित करता है "0, तो आप उस मामले में ठीक हैं।

असल में, विम अजीब और छोटी गाड़ी है।


प्रतीक्षा करें कि यह काम मेरे लिए क्यों नहीं है
विनाशकारी नींबू

@DestructibleWatermelon निश्चित रूप से नहीं कह सकता, लेकिन एक स्पष्टीकरण सबसे अधिक संभावना है। शायद पहले लिखने में यह होना चाहिए था, क्योंकि यह लोगों को दूर फेंक सकता है। एडिट पढ़ें।
--ऑडिका

आपको शायद यह कहना चाहिए yकि दौड़ने से पहले कैसे दबाने या कुछ करने में मदद करनी चाहिए
विनाशकारी नींबू

आप <Esc> कुंजी दबाने का उपयोग क्यों नहीं करते हैं ? इस यूनिकोड ब्लॉक
mbomb007

4
@ mbomb007 <Esc>विम मैपिंग ( :help <>) में मानक मानक है और यही vimgolf.com उपयोग करता है। इसे पढ़ने के लिए किसी भी अनुभवी विमोलफर का उपयोग किया जाएगा। यूनिकोड के रूप में, मुझे छोटे अक्षरों को पढ़ने के लिए भटकना पड़ता है, और वे उन्हें टाइप करने और हेल्प फ़ाइल को खोजने की विधि को अस्पष्ट करते हैं।
udioica १५'१६

44

क्यूबिक्स , 20 बाइट्स

3434Qu$v@!<"OOw\o;/"

लगभग मिला \o/ ...

नेट :

    3 4
    3 4
Q u $ v @ ! < "
O O w \ o ; / "
    . .
    . .

इसे ऑनलाइन आज़माएं

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

अतिरिक्त नोट्स

पीछे की कहानी

@ Ais523 द्वारा इस महान जवाब को पढ़ने के बाद प्रभावित होने के बाद , मैंने क्वीन को आगे बढ़ाने के बारे में सोचना शुरू कर दिया। सब के बाद, वहाँ बहुत कुछ नहीं सेशन थे, और यह बहुत संकुचित नहीं लगा। हालाँकि, तकनीक के रूप में उसका जवाब (और मेरा भी) का उपयोग करता है, कोड को पूर्ण लाइनों की आवश्यकता होती है, कम से कम 12 बाइट्स की बचत की आवश्यकता होती है। उनके स्पष्टीकरण में एक टिप्पणी थी जो वास्तव में मुझे सोच रही थी:

इस क्वीन को आगे बढ़ाने के विषय पर, [...] इसे [...] घन के शीर्ष चेहरे का प्रतिनिधित्व करने के लिए कुछ अन्य तरीके की आवश्यकता होगी [...]

फिर, अचानक, जैसा कि मैं खड़ा था और पीने के लिए कुछ पाने के लिए दूर चला गया, इसने मुझे मारा: क्या होगा यदि कार्यक्रम चरित्र कोड का उपयोग नहीं करता, बल्कि शीर्ष चेहरे का प्रतिनिधित्व करने के लिए संख्या? यह विशेष रूप से कम है अगर हम जिस संख्या को प्रिंट कर रहे हैं उसमें 2 अंक हैं। Cubix दो अंकों की संख्या को आगे बढ़ाने के लिए 3 एक-बाइट निर्देश दिया गया है: N, Sऔर Q, जो धक्का 10, 32और 34क्रमशः है, तो यह बहुत golfy होना चाहिए, मैंने सोचा।

इस विचार के साथ पहली जटिलता यह है कि शीर्ष चेहरा अब बेकार संख्याओं से भर गया है, इसलिए हम अब इसका उपयोग नहीं कर सकते हैं। दूसरी जटिलता यह है कि शीर्ष चेहरे का एक आकार है जो घन आकार का है, और इसे एक समान आकार की आवश्यकता है, अन्यथा एक नंबर अनुदेश सूचक की प्रारंभिक स्थिति पर भी समाप्त हो जाएगा, जिससे प्रदूषित ढेर हो जाएगा। इन जटिलताओं के कारण, मेरे कोड को आकार 2 के क्यूब पर फिट होने की आवश्यकता थी (जिसमें 'केवल' 24 बाइट्स हो सकते हैं, इसलिए मुझे कम से कम 21 बाइट्स को बंद करना पड़ा)। इसके अलावा, क्योंकि शीर्ष और नीचे के चेहरे अनुपयोगी हैं, मेरे पास केवल 16 प्रभावी बाइट्स थे।

इसलिए मैंने उस नंबर को चुनकर शुरुआत की जो शीर्ष चेहरे का आधा हिस्सा बन जाएगा। मैंने N(10) के साथ शुरुआत की थी, लेकिन जो कुछ भी मैं सबकुछ छापने के लिए ले जा रहा था, उसके कारण यह काफी कारगर नहीं था। किसी भी तरह, मैंने नए सिरे से शुरुआत की और Sकिसी कारण से (32) का उपयोग किया । इसका नतीजा यह हुआ कि मैंने उचित विचार किया। यह सब बहुत अच्छा था, लेकिन उद्धरण गायब थे। फिर, यह मेरे लिए है किQ समझ में (34) वास्तव में उपयोगी होगा। आखिरकार, 34 दोहरे उद्धरण का वर्ण कोड है, जो हमें कीमती बाइट्स में बचत, (2, मेरे द्वारा उपयोग किए गए लेआउट में) को स्टैक पर रखने में सक्षम बनाता है। जब मैंने आईपी मार्ग को थोड़ा बदल दिया, उसके बाद जो कुछ बचा था, वह रिक्त स्थान को भरने के लिए एक उत्कृष्ट था।

यह काम किस प्रकार करता है

कोड को 5 भागों में विभाजित किया जा सकता है। मैं एक-एक करके उनके ऊपर जाऊंगा। ध्यान दें कि हम मध्य चेहरों को रिवर्स ऑर्डर में एन्कोडिंग कर रहे हैं क्योंकि स्टैक मॉडल पहले-में-अंतिम-आउट है।

चरण 1: शीर्ष चेहरे को प्रिंट करना

अप्रासंगिक निर्देशों को नो-ऑप्स ( .) द्वारा प्रतिस्थापित किया गया है । आईपी ​​तीसरी लाइन शुरू करता है, बहुत बाईं ओर, पूर्व की ओर इशारा करता है। स्टैक (स्पष्ट रूप से) खाली है।

    . .
    . .
Q u . . . . . .
O O . . . . . .
    . .
    . .

आईपी ​​चौथी पंक्ति में सबसे बाईं ओर स्थित है, जो पश्चिम की ओर इशारा करता है, उसी रेखा पर सबसे दाहिनी स्थिति में घूमने के बारे में। निष्पादित निर्देश (नियंत्रण प्रवाह चरित्र के बिना) हैं:

QOO
Q   # Push 34 (double quotes) to the stack
 OO # Output twice as number (the top face)

स्टैक में सिर्फ 34 होते हैं, स्रोत के अंतिम चरित्र का प्रतिनिधित्व करते हैं।

चरण 2: चौथी पंक्ति को एनकोड करें

यह थोड़ा बहुत आप क्या करने की उम्मीद करते हैं: चौथी पंक्ति को सांकेतिक शब्दों में बदलना। आईपी ​​उस पंक्ति के अंत में दोहरे उद्धरण पर शुरू होता है, और पश्चिम तक जाता है जबकि हर वर्ण के वर्ण कोडों को धकेलता है जब तक कि यह एक मिलान दोहरे उद्धरण नहीं पाता। यह मेल खाने वाला दोहरा उद्धरण चौथी पंक्ति पर अंतिम वर्ण भी है, क्योंकि जब यह बाएं किनारे पर पहुंचता है तो आईपी फिर से लपेटता है।

प्रभावी रूप से, आईपी एक स्थिति को बाईं ओर ले गया है, और स्टैक में अब चरित्र कोड और रिवर्स ऑर्डर में चौथी पंक्ति का प्रतिनिधित्व होता है।

चरण 3: एक और उद्धरण धक्का

हमें एक और उद्धरण देने की आवश्यकता है, और Qकार्यक्रम के प्रारंभ में इसे दाईं ओर लाकर रीसायकल करने से बेहतर तरीका क्या हो सकता है ? इसमें जोड़ा गया बोनस है कि आईपी सीधे तीसरी पंक्ति को एन्कोड करने वाले उद्धरण में चलता है।

यहाँ इस चरण के लिए शुद्ध संस्करण है। अप्रासंगिक घुसपैठों को फिर से ऑप्स द्वारा प्रतिस्थापित किया गया है, निष्पादित होने वाले नो-ऑप्स को हैशटैग ( #) चित्रण प्रयोजनों के लिए बदल दिया गया है और आईपी चौथी पंक्ति में अंतिम वर्ण पर शुरू होता है।

    . .
    . .
Q u $ . . . . .
. . w \ . . / .
    . #
    . #

आईपी ​​पहली पंक्ति में तीसरी पंक्ति पर समाप्त होता है, उस रेखा के अंत में लपेटने के बारे में क्योंकि यह पश्चिम की ओर इशारा करता है। निम्नलिखित निर्देश (नियंत्रण प्रवाह को छोड़कर) बहिष्कृत हैं:

$uQ
$u  # Don't do anthing
  Q # Push the double quote

यह दोहरा उद्धरण तीसरी पंक्ति के अंत में एक का प्रतिनिधित्व करता है।

चरण 4: तीसरी पंक्ति को एनकोडिंग

यह चरण 2 के समान ही काम करता है, इसलिए कृपया स्पष्टीकरण के लिए वहां देखें।

चरण 5: स्टैक प्रिंट करें

स्टैक में अब चौथी और तीसरी लाइनें हैं, रिवर्स ऑर्डर में, इसलिए अब हमें यह करने की आवश्यकता है, इसे प्रिंट करें। IP तीसरी लाइन पर, पश्चिम की ओर बढ़ते हुए, सबसे पहले निर्देश पर शुरू होता है। यहां क्यूब के प्रासंगिक भाग (फिर से, अप्रासंगिक भागों को नो-ऑप्स द्वारा प्रतिस्थापित किया गया है) है।

    . .
    . .
. . . v @ ! < .
. . . \ o ; / .
    . .
    . .

यह एक लूप है, जैसा कि आपने देखा / उम्मीद की होगी। मुख्य शरीर है:

o;
o  # Print top of stack as character
 ; # Delete top of stack

यदि शीर्ष आइटम 0 है, तो लूप समाप्त होता है, जो केवल तब होता है जब स्टैक खाली होता है। यदि लूप समाप्त होता है, @तो प्रोग्राम को समाप्त करके निष्पादित किया जाता है।


काश मैं इसे और अधिक
बढ़ा

बाउंसियों का हमेशा स्वागत है;;
लूका

42

जावास्क्रिप्ट ईएस 6 - 21 बाइट्स

$=_=>`$=${$};$()`;$()

मैं इस क्वीन को "द ब्लिंग क्वीन" कहता हूं।

कभी कभी, आप शैली में गोल्फ होगा।


क्या !$=_=>`!$=${$}()`()आप 2 बाइट्स बचाते हैं?
डाउनटाउन

Invalid assignment left hand side। काश यह काम करती :(
मामा फन रोल

1
@ T @xCräftîñg टेम्पलेट शाब्दिक के आसपास कोष्ठक को नष्ट करना केवल मूल प्रोटोटाइप कार्यों पर काम करता है, जैसे Array.prototype.join
मामा फन रोल

2
हम्म, यकीन नहीं होता। मैंने इसे एक साल पहले लिखा था (तब इसे वैध माना गया था), और मैं बहुत बारीकी से नियम में बदलाव का पालन नहीं कर रहा था। हालाँकि, एरो फंक्शन में जोड़ना alertया जोड़ना console.logऔर कोष्ठक में टेम्प्लेट स्ट्रिंग लपेटना काम करेगा।
मामा फन रोल

3
इसके अलावा, यदि आप इसे कॉनकोल में चलाते हैं, तो यह इस साइट पर $ (jQuery फ़ंक्शन) को ओवरराइट करता है, और अपवोट फ़ंक्शन अब काम नहीं करेगा। :)
स्टीवन पलिंकास

41

ब्रेनफ़ * ck (755 वर्ण)

यह Erik Bosman (cjvu.nl पर ejbosman) द्वारा विकसित एक तकनीक पर आधारित है। ध्यान दें कि "ESultanik's Quine!" पाठ वास्तव में इसके लिए आवश्यक है कि वह एक रानी हो!

->++>+++>+>+>++>>+>+>+++>>+>+>++>+++>+++>+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+>+>++>>>+++>>>>>+++>+>>>>>>>>>>>>>>>>>>>>>>+++>>>>>>>++>+++>+++>+>>+++>>>+++>+>+++>+>++>+++>>>+>+>+>+>++>+++>+>+>>+++>>>>>>>+>+>>>+>+>++>+++>+++>+>>+++>+++>+>+++>+>++>+++>++>>+>+>++>+++>+>+>>+++>>>+++>+>>>++>+++>+++>+>>+++>>>+++>+>+++>+>>+++>>+++>>>+++++++++++++++>+++++++++++++>++++++>+++++++++++++++>++++++++++>+++>+++>++++>++++++++++++++>+++>++++++++++>++++>++++++>++>+++++>+++++++++++++++>++++++++>++++>++++++++++++>+++++++++++++++>>++++>++++++++++++++>+++>+++>++++>++++++>+++>+++++++++>++++>+>++++>++++++++++>++++>++++++++>++>++++++++++>+>+++++++++++++++>+++++++++++++
ESultanik's Quine!
+[[>>+[>]+>+[<]<-]>>[>]<+<+++[<]<<+]>>+[>]+++[++++++++++>++[-<++++++++++++++++>]<.<-<]

13
यह एक चतुर तरीका है।
पीटर ओल्सन

13
यह कैसे काम करता है?
गौरवशाली हेकलर

3
@proudhaskeller IIRC, ESultanik's Quine!मेमोरी को एक स्टैक एन्कोडिंग ESultanik's Quine!और आगे की ओर सेट करता है , जिसमें प्रत्येक वर्ण के लिए दो बाइट्स मेमोरी होती है (0x1F से ASCII मान ऑफसेट)। कोड का अंतिम बिट मेमोरी के माध्यम से लूप करता है, पहले प्रोग्रामेटिक रूप से ++>+++…प्रत्येक वर्ण के लिए कोड्स को पुन: पेश करता है , फिर वास्तव में वर्णों को प्रिंट करता है।
ESultanik

4
@CatsAreFluffy वे एक रानी होने के लिए आवश्यक हैं! हालांकि यह सच है कि उन्हें हटाया जा सकता है, एक को भी संपत्ति को बनाए रखने के लिए पूर्ववर्ती कोड को बदलना होगा।
ESultanik

1
यह सच है। साथ ही नए सिरे जरूरी हैं।
कैलकुलेटरफ्लीन

36

हेक्सागोनी , साइड की लंबाई 15 14 13 12, 616 533 456 383 बाइट्स

कई दिनों की सावधान गोल्फिंग के बाद, छोरों को फिर से व्यवस्थित करना और फिर से शुरू करना, मैं आखिरकार इसे एक पक्ष 12 हेक्सागोन तक ले जाने में कामयाब रहा ।

1845711724004994017660745324800783542810548755533855003470320302321248615173041097895645488030498537186418612923408209003405383437728326777573965676397524751468186829816614632962096935858"">./<$;-<.....>,.........==.........<"......."">'....>+'\.>.........==........<"......"">:>)<$=<..>..............$..<"...."">\'Q4;="/@>...............<"....."">P='%<.>.............<"..!'<.\=6,'/>

इसे ऑनलाइन आज़माएं!

सामने आया:

            1 8 4 5 7 1 1 7 2 4 0 0
           4 9 9 4 0 1 7 6 6 0 7 4 5
          3 2 4 8 0 0 7 8 3 5 4 2 8 1
         0 5 4 8 7 5 5 5 3 3 8 5 5 0 0
        3 4 7 0 3 2 0 3 0 2 3 2 1 2 4 8
       6 1 5 1 7 3 0 4 1 0 9 7 8 9 5 6 4
      5 4 8 8 0 3 0 4 9 8 5 3 7 1 8 6 4 1
     8 6 1 2 9 2 3 4 0 8 2 0 9 0 0 3 4 0 5
    3 8 3 4 3 7 7 2 8 3 2 6 7 7 7 5 7 3 9 6
   5 6 7 6 3 9 7 5 2 4 7 5 1 4 6 8 1 8 6 8 2
  9 8 1 6 6 1 4 6 3 2 9 6 2 0 9 6 9 3 5 8 5 8
 " " > . / < $ ; - < . . . . . > , . . . . . .
  . . . = = . . . . . . . . . < " . . . . . .
   . " " > ' . . . . > + ' \ . > . . . . . .
    . . . = = . . . . . . . . < " . . . . .
     . " " > : > ) < $ = < . . > . . . . .
      . . . . . . . . . $ . . < " . . . .
       " " > \ ' Q 4 ; = " / @ > . . . .
        . . . . . . . . . . . < " . . .
         . . " " > P = ' % < . > . . .
          . . . . . . . . . . < " . .
           ! ' < . \ = 6 , ' / > . .
            . . . . . . . . . . . .

हालांकि यह हेक्सागोनी कोड के सबसे अधिक गोल्फ की तरह नहीं दिखता है, मैंने जिस प्रकार के एन्कोडिंग का उपयोग किया है, वह नो-ऑप्स के लंबे समय तक चलने के लिए अनुकूलित है, जो कि आप अन्यथा बचेंगे।

व्याख्या

यह पिछले हेक्सागोनी उत्तर. को एक अलग तरीके से नो-ऑप्स ( ) एन्कोडिंग द्वारा धड़कता है । जबकि वह जवाब हर दूसरे चरित्र को बनाकर स्थान बचाता है ., मेरा नंबर नो-ऑप्स की संख्या को एन्कोड करता है । इसका मतलब यह भी है कि स्रोत को इतना प्रतिबंधित नहीं होना चाहिए।

यहां मैं एक बेस 80 एन्कोडिंग का उपयोग करता हूं, जहां 16 से नीचे की संख्याएं बिना-ऑप्स के रन का संकेत देती हैं, और 16 और 79 के बीच की संख्या 32 ( !) से 95 ( _) तक का प्रतिनिधित्व करती है (मुझे अभी पता चल रहा है कि मैंने अपने सभी _एस को गोल्फ से बाहर कर दिया है कोड योग्य)। कुछ पायथोनिक स्यूडोकोड:

i = absurdly long number
print(i)
base = 80
n = i%base
while n:
    if n < 16:
        print("."*(16-n))
    else:
        print(ASCII(n+16))
    i = i//base
    n = i%base

संख्या को षट्भुज के पहले भाग में कूटबद्ध किया गया है, सभी के साथ

" " > 
 " " > 
  ... etc

बाईं ओर और

 > ,
< "
 >
< "
... etc

दाईं ओर एक सेल में संख्या को एनकोड करने के लिए पॉइंटर को पुनर्निर्देशित करना। यह मार्टिन एंडर के उत्तर (धन्यवाद) से लिया गया है , क्योंकि मैं अधिक कुशल तरीका नहीं खोज सका।

यह तब निम्न अनुभाग में प्रवेश करता है ->:

       " " > \ ' Q 4 ; = " / @ > . . . .
        . . . . . . . . . . . < " . . .
         . . " " > P = ' % < . > . . .
          . . . . . . . . . . < " . .
     ->    ! ' < . \ = 6 , ' / > . .

!'लूप शुरू करने से पहले सही मेमोरी सेल में संख्या और नेविगेट करता है। P='%मौजूदा संख्या को 80 से बढ़ाता है। यदि परिणाम 0 है, तो समाप्ति पर जाएं @, अन्यथा नीचे जाएं और मूल्य के साथ आधुनिक परिणाम के बगल में एक सेल बनाएं -16

   . " " > ' . . . . > + ' \ . > . . . . . .
    . . . = = . . . . . . . . < " . . . . .
     . " " > : > ) < $ = < . . > . . . . .
      . . . . . . . . . $ . . < " . . . .
       " " > \ ' Q 4 ; = " / @ > . . . .
                      /
                     /

सेल को (आधुनिक मान + -16) पर सेट करें। यदि वह मान ऋणात्मक है, तो शाखा में ऊपर जाएँ >+'\, अन्यथा नीचे जाएँ।

यदि मूल्य सकारात्मक है:

 " " > . / < $ ; - < . . . . . > , . . . . . .
  . . . = = . . . . . . . . . < " . . . . . .
   . " " > ' . . . . > + ' \ . > . . . . . .

पॉइंटर समाप्त होता है, ;-<जो सेल को (mod value - -16) सेट करता है और इसे प्रिंट करता है।

मान नकारात्मक है:

   . " " > ' . . . . > + ' \ . > . . . . . .
    . . . = = . . . . . . . . < " . . . . .
     . " " > : > ) < $ = < . . > . . . . .

उस > ) <अनुभाग पर जाएं जो लूप शुरू करता है। यहाँ इसे अलग किया गया है:

     . . > ) < $ = < . .
      . . . . . . . . .
       \ ' Q 4 ; = " /

जो उस कोड को निष्पादित करता है 'Q4;="=जो एक प्रिंट करता है .(मार्टिन एंडर के लिए फिर से धन्यवाद, जिसने वर्णों के लिए पत्र-संख्या संयोजन खोजने के लिए एक कार्यक्रम लिखा था ) और प्रारंभिक सेल में वापस चला जाता है। इसके बाद वेतन वृद्धि ( )) मॉड वैल्यू सेल और लूप फिर से हो जाती है, जब तक कि मॉड वैल्यू पॉजिटिव न हो।

जब ऐसा किया जाता है, तो वह ऊपर चला जाता है और दूसरे सेक्शन में शामिल हो जाता है:

 " " > . / < $ ; - < . . .
            \
             \

सूचक फिर से बड़े लूप की शुरुआत में वापस यात्रा करता है

 " " > . / <--
  . . . = =
   . " " > ' 
    . . . = = 
     . " " > :
      . . . . .
       " " > \ ' . .
        . . . . . . .
         . . " " > P = ' % < . > . . .

यह निष्पादित करता है ='=:'जो वर्तमान संख्या को 80 से विभाजित करता है और सही सेल में नेविगेट करता है।

पुराना संस्करण (साइड लंबाई 13)

343492224739614249922260393321622160373961419962223434213460086222642247615159528192623434203460066247203920342162343419346017616112622045226041621962343418346002622192616220391962343417346001406218603959366061583947623434"">/':=<$;'<.....>(......................<"......"">....'...>=\..>.....................<"....."">....>)<.-...>...........==......<"...."">.."...'.../>.................<"..."">\Q4;3=/.@.>...............<".."".>c)='%<..>..!'<.\1*='/.\""

इसे ऑनलाइन आज़माएं!

मैं निश्चित रूप से इस तरफ से एक और लंबाई को गोल्फ कर सकता हूं, लेकिन मुझे कल इसे छोड़ना होगा क्योंकि यह देर हो रही है। पता चला कि मैं अधीर हूं और कल तक इंतजार नहीं कर सकता। हो सकता है कि एक और पक्ष गोल्फ हो सकता है? :( आह्ह्ह्ह्ह्ह्ह्ह्ह्ह्ह्ह्ह्ह मैंने कर दिया!

मैंने एक बेस 77 एन्कोडिंग के साथ अतिरिक्त अंकों के एक जोड़े को भी गढ़ा है , लेकिन यह वास्तव में कोई फर्क नहीं पड़ता, क्योंकि इसमें एक ही बायटेकाउंट है।


13
ये अद्भुत है। इस संकर रन-लंबाई एन्कोडिंग के लिए विचार वास्तव में साफ है। :) अगर मैं भूल जाऊं तो आपको एक इनाम देने के लिए मुझे याद दिलाएं।
मार्टिन एंडर

35

पोस्टस्क्रिप्ट, 20 वर्ण

छोटा और वैध। अनुगामी न्यूलाइन सहित 20 चार्ट।

(dup == =)
dup == =

33

क्यूबिक्स , 45 बाइट्स

.....>...R$R....W..^".<R.!'.\)!'"R@>>o;?/o'u"

आप यहाँ इस कोड का परीक्षण कर सकते हैं

इस कार्यक्रम का पालन करना काफी कठिन है, लेकिन ऐसा करने का कोई भी मौका देने के लिए, हमें इसे क्यूब में व्याख्या करके शुरू करने की आवश्यकता है, जैसे कि क्यूबिक्स दुभाषिया करता है:

      . . .
      . . >
      . . .
R $ R . . . . W . . ^ "
. < R . ! ' . \ ) ! ' "
R @ > > o ; ? / o ' u "
      . . .
      . . .
      . . .

यह एक Befunge-style quine है, जो स्ट्रिंग शाब्दिक बनाने के लिए रैपिंग शोषण के माध्यम से काम करता है "निष्पादन योग्य कोड" (केवल एक के साथ) " चिह्न के साथ, , कोड एक ही समय में उद्धरण के अंदर और बाहर दोनों होता है, कुछ ऐसा जब आप संभव हो जाते हैं। प्रोग्राम जो नॉनलाइनर और नॉनप्लेनर हैं)। ध्यान दें कि यह एक उचित क्वीन की हमारी परिभाषा को फिट करता है, क्योंकि दो दोहरे उद्धरणों में खुद को सांकेतिक शब्दों में बदलना नहीं है, बल्कि अंकगणित के उपयोग के माध्यम से बाद में गणना की जाती है।

हालांकि, Befunge के विपरीत, हम यहां एक के बजाय चार स्ट्रिंग्स का उपयोग कर रहे हैं। यहां बताया गया है कि वे स्टैक पर कैसे धकेल दिए जाते हैं;

  1. कार्यक्रम बाएं किनारे के शीर्ष पर शुरू होता है, दाहिनी ओर जा रहा है; यह दो बार दाईं ओर मुड़ता है (R ), यह तीसरी और अंतिम पंक्तियों के साथ , जो पूरे घन के चारों ओर लपेटते हैं। डबल उद्धरण स्वयं से मेल खाता है, इसलिए हम पूरी तीसरी पंक्ति को स्टैक पर पीछे की ओर धकेलते हैं। फिर दोहरे उद्धरण के बाद निष्पादन जारी रहता है।

  2. uआदेश सही करने के लिए यू-टर्न करता है, तो अगली बात हम चला रहे हैं से है '"के बाद मध्य लाइन पर। यह "स्टैक पर एक धक्का देता है । चारों ओर लपेटने के लिए जारी रखते हुए, हमने <क्यूब के बाएं हाथ के पास मारा और वापस उछाल दिया। जब इस दिशा से संपर्क किया जाता है, तो हम एक सादा "कमांड देखते हैं , नहीं '", इसलिए पूरी दूसरी पंक्ति को तीसरी पंक्ति और डबल उद्धरण के ऊपर स्टैक पर पीछे धकेल दिया जाता है।

  3. हम !स्टैक पर एक धक्का देकर शुरू करते हैं ( '!) और इसे बढ़ाते हैं ( )); यह हमारे स्रोत कोड (जो स्ट्रिंग को समाप्त कर देगा) में एक दोहरे उद्धरण की आवश्यकता के बिना एक दोहरे उद्धरण का उत्पादन करता है। एक दर्पण ( \) उत्तर की ओर निष्पादन की दिशा को दर्शाता है; तब Wकमान बाईं ओर जाती है। यह हमें सातवें स्तंभ पर ऊपर की ओर जाता है, क्योंकि यह एक घन है, तीसरी पंक्ति पर बाईं ओर लपेटता है, फिर तीसरे स्तंभ पर नीचे की ओर। हम Rशीर्ष पंक्ति के साथ दाएं मुड़ने और बाईं ओर जाने के लिए एक हिट करते हैं; फिर $स्कीप Rजिसके माध्यम से हमने प्रोग्राम में प्रवेश किया है, इसलिए निष्पादन "लाइन के अंत में गोल लपेटता है , और हम पहली पंक्ति को उसी तरह से एक स्ट्रिंग में कैप्चर करते हैं जैसा हमने दूसरे और तीसरे के लिए किया था।

  4. ^आदेश हमें उत्तर की ओर भेजता है ग्यारहवें स्तंभ, है जो (घन रैपिंग के लिए अनुमति) को दक्षिण की ओर पांचवें पर। केवल एक चीज !जिसका हम सामना करते हैं वह है (स्किप नॉनजरो; स्टैक के शीर्ष पर वास्तव में नॉनजरो है), जो कि oकमांड पर छोड़ देता है , प्रभावी रूप से पांचवें कॉलम को पूरी तरह से खाली कर देता है। इसलिए हम uकमांड पर वापस जाते हैं , जो एक बार फिर से यू-टर्न लेती है, लेकिन इस बार हम अंतिम कॉलम पर दक्षिण की ओर चले गए हैं, जो चौथे कॉलम के उत्तर की ओर जाता है। हमने यू-टर्न के दौरान एक डबल कोट मारा, हालांकि, हम नीचे से ऊपर तक एक स्ट्रिंग में पूरे चौथे कॉलम को कैप्चर करते हैं। कार्यक्रम के अधिकांश दोहरे उद्धरणों के विपरीत, यह एक स्वयं को बंद नहीं करता है; बल्कि, यह "शीर्ष-दाएं कोने में बंद है , जिसका अर्थ है कि हम नौ-वर्ण स्ट्रिंग को पकड़ते हैं ...>.....

तो स्टैक लेआउट अब है, ऊपर से नीचे तक: चौथा स्तंभ; शीर्ष पंक्ति; "; बीच की पंक्ति; "; निचली पंक्ति। इनमें से प्रत्येक को स्टैक के शीर्ष के पास पहले वर्ण के साथ स्टैक पर दर्शाया गया है (क्यूबिक्स इस क्रम के विपरीत स्ट्रिंग्स को धक्का देता है, जैसे कि बीफुंज करता है, लेकिन हर बार आईपी प्राकृतिक पढ़ने की दिशा के विपरीत दिशा में आगे बढ़ रहा था,) इसलिए यह प्रभावी रूप से दो बार उलट गया)। यह ध्यान दिया जा सकता है कि स्टैक सामग्री मूल कार्यक्रम के लगभग समान हैं (क्योंकि चौथा स्तंभ, और क्यूब के उत्तर / शीर्ष चेहरे में एक ही क्रम में समान वर्ण होते हैं; जाहिर है, यह जानबूझकर उस तरह डिजाइन किया गया था)।

अगला चरण स्टैक की सामग्री को प्रिंट करना है। सभी धक्का के बाद, आईपी चौथे स्तंभ पर उत्तर की ओर जा रहा है, इसलिए यह >वहां से टकराता है और एक तंग लूप में प्रवेश करता है >>o;?(यानी "पूर्व की ओर मुड़ें, पूर्व की ओर मुड़ें, चरित्र के रूप में आउटपुट, पॉप, सकारात्मक होने पर सही मुड़ें")। क्योंकि सातवीं पंक्ति एनओपी से भरी है, ?पहली बार वापस लपेटने जा रही है >, इसलिए यह प्रभावी रूप से स्टैक की संपूर्ण सामग्री को धकेलता है ( ?एक खाली स्टैक पर एक नो-ऑप है)। हमने लगभग पूरा कार्यक्रम छाप दिया! दुर्भाग्य से, यह अभी तक पूरा नहीं हुआ है; हमें अंत में दोहरा उद्धरण याद आ रहा है।

एक बार जब लूप समाप्त हो जाता है, तो हम दर्पण की एक जोड़ी के माध्यम से, पश्चिम की ओर बढ़ते हुए, केंद्रीय रेखा पर प्रतिबिंबित करते हैं। (हमने \पहले दर्पण के "दूसरे पक्ष" का उपयोग किया था; अब हम दक्षिण-पश्चिम की ओर का उपयोग कर रहे हैं। /दर्पण का उपयोग पहले नहीं किया गया है।) हमारा सामना होता है '!, इसलिए हम विस्मयादिबोधक चिह्न (यानी 33; हम ASCII का उपयोग कर रहे हैं) और क्यूबिक्स स्टैक पर पूर्णांक और वर्णों के बीच अंतर नहीं करता है)। (आसानी से, यह वही है !जिसे oपहले कमांड पर छोड़ देने के लिए इस्तेमाल किया गया था।) हम कमांड की एक जोड़ी का सामना Rकरते हैं और "मैनुअल" यू-टर्न बनाने के लिए उनका उपयोग करते हैं ( Rयहां दूसरी कमांड का उपयोग पहले पहुंचने के लिए पहले किया गया था। पंक्ति, इसलिए किसी अन्य कमांड को फिट करने के लिए यह सबसे स्वाभाविक प्रतीत हुआ , बाईं ओर जाने के लिएR साथ कमांड ।W>दूसरी पंक्ति पर कमांड, निष्पादन को वापस उसी स्थान पर उछलता है जहां वह था। इसलिए हम फिर से बाईं ओर बढ़ते हैं, लेकिन इस बार हम दक्षिण की ओर जा रहे हैं, इसलिए निष्पादित करने के लिए अगला कमांड है )(एक दोहरे उद्धरण में विस्मयादिबोधक चिह्न बढ़ाना), इसके बाद एक o(इसे आउटपुट करने के लिए)। अंत में, निष्पादन आठवीं पंक्ति के साथ दूसरे कॉलम पर आता है, जहां यह @प्रोग्राम से बाहर निकलने के लिए पाता है ।

मैं तीसरी पंक्ति के लिए आवारा माफी माँगता हूँ। यह कार्यक्रम के इस संस्करण में कुछ भी नहीं करता है; यह पहले के एक विचार का हिस्सा था जो मेरे पास था लेकिन जरूरी नहीं था। हालांकि, एक बार मुझे एक काम करने वाला क्वीन मिल गया, मैं बस इसे चारों ओर गड़बड़ करने के बजाय इसे प्रस्तुत करना चाहता था, विशेष रूप से इसे हटाने से बाइट की गिनती नहीं बदलेगी। इस कुनबे को और नीचे गिराने के विषय पर, यह मुझे आश्चर्यचकित नहीं करेगा अगर यह 3 × 3 पर संभव था, केवल पहली पांच पंक्तियों का उपयोग करके, लेकिन मैं ऐसा करने का एक स्पष्ट तरीका नहीं देख सकता, और इसकी आवश्यकता होगी यहां तक ​​कि क्यूब के शीर्ष चेहरे का प्रतिनिधित्व करने के लिए किसी अन्य तरीके से सभी नियंत्रण प्रवाह की एक साथ पैकिंग (या एल्गोरिथ्म को संशोधित करने के लिए ताकि यह चौथे स्तंभ का उपयोग करना जारी रख सके, भले ही यह अब दस या ग्यारह वर्ण लंबा हो) ।


अच्छा काम, यह वास्तव में प्रभावशाली स्कोर है। मुझे प्यार है कि आपने शीर्ष चेहरे को कैसे कूट दिया। :)
मार्टिन एंडर

यह अविश्वसनीय है! अगर यह किसी भी तरह की मदद करेगा, तो पुश करने का दूसरा तरीका "है Q
ETHproductions

1
वाह! हालांकि मैं कभी भी क्यूबिक्स क्वीन नहीं देख पाऊंगा!
फ्लिपकैक

3
मेरे पास कल स्पष्टीकरण पढ़ने का समय नहीं था, लेकिन अब मेरे पास ... बस ... वाह। मैं विश्वास नहीं कर सकता कि दो या तीन अलग-अलग उद्देश्यों के लिए कितने वर्णों का उपयोग किया जाता है। यह शायद मैंने कभी देखा है सबसे अच्छा क्यूबिक्स कार्यक्रम है।
ETHproductions

अच्छे खर्च।
रॉबर्ट फ्रेज़र

33

पायथन 2, 30 बाइट्स

_='_=%r;print _%%_';print _%_

यहां से ले गए


1
+1, आपने मेरे समान समाधान को हराया इसलिए मैंने इसे हटा दिया। यह ध्यान दिया जाना चाहिए कि यह केवल पायथन 2 में काम करता है
nyuszika7h

2
यह चर नाम के साथ अजीब लगता है _, लेकिन अगर आप इसे किसी भी अक्षर को सौंपते हैं, तो बेहतर है, अर्थात्:s='s=%r;print s%%s';print s%s
एहतेश चौधरी

5
यदि यह समाधान आपकी खुद की रचना नहीं है, तो आपको इसे सामुदायिक विकी बनाना चाहिए। इसके अलावा, लिंक मर चुका है।
mbomb007

1
मुझे पार्टी में थोड़ी देर हो गई है, लेकिन क्या कोई यह समझा सकता है कि यह कैसे काम करता है?
मैडक्स ऑक्ट

9
इसके लिए एक अनुगामी लाइनफीड को मान्य होना आवश्यक है। जैसा कि है, स्रोत कोड आउटपुट से मेल नहीं खाता है।
डेनिस

32

विम, 17 , 14 कीस्ट्रोक्स

किसी ने इसे बेतरतीब ढंग से उकेरा, तो मुझे याद आया कि यह मौजूद है। जब मैंने इसे फिर से पढ़ा, तो मुझे लगा कि "अरे, मैं इससे बेहतर कर सकता हूं!", इसलिए मैंने दो बाइट्स उड़ाए। यह अभी भी सबसे छोटा नहीं है, लेकिन कम से कम यह एक सुधार है।


एक लंबे समय के लिए, मैं सोच रहा था कि क्या एक विम क्वीन संभव है। एक तरफ, यह संभव होना चाहिए, क्योंकि विम पूरा हो रहा है। लेकिन वास्तव में लंबे समय के लिए विम क्वीन की तलाश करने के बाद, मैं एक खोजने में असमर्थ था। मैंने किया लगता है इस PPCG चुनौती है, लेकिन यह बंद कर दिया और नहीं कर रहा है वास्तव में के बारे में शाब्दिक quines। इसलिए मैंने एक बनाने का फैसला किया, क्योंकि मुझे एक नहीं मिला।

मुझे इस जवाब पर गर्व है, दो के कारण प्राथमिकताओं के कारण :

  1. यह पहली रानी है जिसे मैंने कभी बनाया है, और

  2. जहाँ तक मुझे पता है, यह दुनिया पहले विम-क्वीन है है जो कभी प्रकाशित होगा! मैं इस बारे में गलत हो सकता है, इसलिए यदि आप एक के बारे में जानते हैं, तो कृपया मुझे बताएं।

तो, उस लंबे परिचय के बाद, यहाँ यह है:

qqX"qpAq@q<esc>q@q

इसे ऑनलाइन आज़माएं!

ध्यान दें कि जब आप इसे टाइप करते हैं, तो यह <esc>कीस्ट्रोके को प्रदर्शित करेगा ^[। यह अभी भी सटीक है, क्योंकि ^[प्रतिनिधित्व करता है 0x1B, जो ASCII में बच जाता है , और जिस तरह से विम आंतरिक रूप से प्रतिनिधित्व करता है<esc> कुंजी का ।

यह भी ध्यान दें, यदि आप किसी मौजूदा विम सत्र को लोड करते हैं तो यह परीक्षण विफल हो सकता है। मैंने एक उत्तर देते हुए लिखा कि यहाँ , यदि आप अधिक जानकारी चाहते हैं, लेकिन मूल रूप से आपको विम को लॉन्च करने की आवश्यकता है

vim -u NONE -N -i NONE

याqqq इसे चलाने से पहले टाइप करें।

स्पष्टीकरण:

qq                  " Start recording into register 'q'
  X                 " Delete one character before the cursor (Once we play this back, it will delete the '@')
   "qp              " Paste register 'q'
      Aq@q<esc>     " Append 'q@q' to this line
               q    " Stop recording
                @q  " Playback register 'q'

एक साइड नोट पर, यह उत्तर संभवतः PPCG उत्तर में अधिकांश 'q' के लिए एक विश्व रिकॉर्ड है, या कुछ और।


1
2i2i<esc>इतना करीब है। मुझे लगता है कि इस काम को करने के लिए मुझे कुछ करना होगा।
ज़ीवेई

@zwei मुझे पता है, यह करीब है यह दर्द होता है! दरअसल, <Esc>वी में निहित है, इसलिए यह काम करता है । दुर्भाग्य से इसमें एक नई पंक्ति भी शामिल है, यही वजह है कि मैंने इसे अभी तक पोस्ट नहीं किया है।
DJMcMayhem

q"iq"qbP<Esc>qbP 11 है। आप इसे डाल दिया reddit , मैं यहाँ vimgolfing की जांच की और एक खाता बनाने का फैसला किया। यह उत्तर मैंने वहां पोस्ट किया है।
udioica

2
@udioica क्या आप उत्तर के रूप में पोस्ट कर सकते हैं?
DJMcMayhem

28

खोया , 120 116 98 96 76 70 66 बाइट्स

संपादित करें: yay, 100 से कम

संपादित करें: /नीचे की पंक्ति में सभी s पर स्विच करके एक गुच्छा o 'बाइट्स सहेजा गया

:2+52*95*2+>::1?:[:[[[[@^%?>([ "
////////////////////////////////

इसे ऑनलाइन आज़माएं! + सत्यापन यह सभी संभव राज्यों के लिए निर्धारक है

लॉस्ट एक 2D भाषा है जिसमें शुरुआती स्थिति और दिशा पूरी तरह से यादृच्छिक होती है। इसका मतलब यह है कि आपको सही निर्देश सूचक मिल गया है यह सुनिश्चित करने के लिए हर स्तर पर बहुत सारी त्रुटि-जाँच होनी चाहिए, और यह एक ऐसा नहीं है जो अभी बेतरतीब ढंग से भटक गया है।

स्पष्टीकरण:

/नीचे की रेखा पर सभी s यह सुनिश्चित करने के लिए हैं कि सभी बिंदु जो एक ऊर्ध्वाधर दिशा में या नीचे की रेखा पर घूमते हैं, वे सही दिशा में फ़नल हो जाते हैं। वहां से, वे कई अलग-अलग स्थानों पर समाप्त होते हैं, लेकिन उनमें से सभी अंत में सही जा रहे हैं

 ^%?>
 ////

जो स्टैक में सभी गैर-शून्य संख्याओं को निकालता है। इसके ([बाद किसी भी अतिरिक्त 0s को भी साफ करता है।

स्पष्ट के बीच में, यह हिट % , जो 'सुरक्षा' को बंद कर देता है, जो प्रोग्राम को हिट होने पर इसे समाप्त करने की अनुमति देता है @(इसके बिना, एक सूचक शुरू होने पर कार्यक्रम तुरंत समाप्त हो सकता है@ )।

वहाँ से यह एक बहुत ही सरल 2 डी भाषा क्वीन करता है, एक स्ट्रिंग शाब्दिक ( ") को पहली पंक्ति के चारों ओर लपेटकर, एक स्थान को डुबो कर एक "चरित्र को धक्का देता है ( :2+) और फिर एक नई रेखा ( 52*)। दूसरी पंक्ति के लिए, यह एक /चरित्र बनाता है ( 95*2+) और इसे एक गुच्छा डुप्लिकेट करता है (>::1?:[:[[[[ ) , अंत @में स्टैक को प्रिंट करने और प्रिंट करने से पहले । ?1भी कई 0s बनाने यदि सूचक जल्दी में प्रवेश करती है, उन्हें बाद में स्पष्ट करने के लिए होने पर बचत से प्रक्रिया को रोकने के लिए है।

मैंने अंतिम पंक्ति को एक ही चरित्र बनाकर यहां 20 बाइट्स बचाए, जिसका अर्थ है कि मैं डुपिंग प्रक्रिया से सीधे अंत में जा सकता हूं @

नकल प्रक्रिया के बारे में स्पष्टीकरण:

[एक चरित्र है जिसे 'डोर' के रूप में जाना जाता है। यदि सूचक एक [या एक के समतल पक्ष को हिट करता है ], तो यह प्रतिबिंबित करता है, अन्यथा यह इसके माध्यम से गुजरता है। हर बार जब पॉइंटर एक डोर से इंटरैक्ट करता है, तो वह विपरीत टाइप पर स्विच कर जाता है। इस ज्ञान का उपयोग करके हम एक >:[ब्लॉक में कितनी बार एक निर्देश निष्पादित करेंगे, इसके लिए एक सरल सूत्र का निर्माण कर सकते हैं ।

निर्देशों की प्रारंभिक राशि जोड़ें। प्रत्येक के लिए [, इसके बाईं ओर दिए गए निर्देशों का 2 गुना राशि जोड़ें। उदाहरण के लिए >::::[:[[[, हम प्रारंभिक राशि के रूप में 5 से शुरू करते हैं। पहले डोर में 4 डुप्लिकेट निर्देश हैं, इसलिए हम 4 * 2 = 8 से 5 प्राप्त करते हैं। 13. अन्य तीन डोर में उनके बायीं ओर 5 डूप होते हैं, इसलिए हम 43 प्राप्त करने के लिए 3 * (5 * 2) = 30 से 13 जोड़ते हैं। डंप निर्देश निष्पादित, और >ढेर पर 44 s है। उसी प्रक्रिया को अन्य निर्देशों पर लागू किया जा सकता है, जैसे कि( कि स्टैक से बड़ी मात्रा में आइटम को धकेलना, या जैसा कि यहां इस्तेमाल किया जाता है, स्टैक से आइटम को साफ़ करना।

एक ट्रिक जो मैंने यहाँ प्रयोग की है, बहुत से 0 से बचने के लिए 1?। यदि वर्ण 0 है, तो ?1 को स्किप नहीं करता है, जिसका अर्थ है कि यह शेष के लिए 1 को डुप्लिकेट करता है। इससे स्टैक को बाद में साफ करना बहुत आसान हो जाता है।


25

ये SO से दो सबसे छोटी रूबी खदानें हैं :

_="_=%p;puts _%%_";puts _%_

तथा

puts <<2*2,2
puts <<2*2,2
2

मुझसे मत पूछो कि दूसरा काम कैसे होता है ...


8
दूसरा एक वंशानुगत का उपयोग करता है, <<2अगली पंक्ति पर एक स्ट्रिंग शुरू करता है , और *2स्ट्रिंग को दोहराता है
मिंग-तांग

आपको 2 की आवश्यकता क्यों है?
कैलकुलेटरफाइनल

1
@CalculatorFeline यह वंशानुगत स्ट्रिंग का टर्मिनेटर है (जिसे अपनी पंक्ति में प्रकट होना पड़ता है)। यह वास्तव में एक 2 नहीं है, हालांकि: tio.run/##KypNqvz/v6C0pFjBxsZAy0jHgAuFY8D1/z8A
मार्टिन

25

विखंडन , 6 बाइट्स

ऐसा प्रतीत होता है कि यह अब इन उत्तरों में सबसे छोटा "उचित" क्वीन है।

'!+OR"

व्याख्या

नियंत्रण प्रवाह Rएक एकल दाएं-बाएं (1,0)परमाणु से शुरू होता है। यह "टॉगल करने के लिए प्रिंट मोड से टकराता है और फिर लाइन के चारों ओर लपेटता है, फिर '!+ORसे एक ही हिट करने से पहले मुद्रण "और प्रिंट मोड से बाहर निकलता है।

जो "छपने के लिए खुद को छोड़ देता है । सबसे छोटा रास्ता है '"O(जहां '"के चरित्र कोड के लिए परमाणु का द्रव्यमान सेट "और Oचरित्र प्रिंट और परमाणु नष्ट कर देता है), लेकिन यह अगर हमने "प्रिंट मोड के साथ हस्तक्षेप करेगा। इसलिए इसके बजाय हम परमाणु के मान को '!(एक से कम ") निर्धारित करते हैं , फिर साथ में वृद्धि करते हैं +और फिर परिणाम को प्रिंट करते हैं O

वैकल्पिक

यहां कुछ विकल्प दिए गए हैं, जो लंबे समय तक हैं, लेकिन हो सकता है कि उनकी तकनीकें किसी को उनका उपयोग करके एक छोटा संस्करण खोजने के लिए प्रेरित करें (या शायद वे कुछ सामान्यीकृत quines में अधिक उपयोगी होंगे)।

Jअंप का उपयोग कर 8 बाइट्स

' |R@JO"

फिर से, कोड शुरू होता है R@स्वैप द्रव्यमान और ऊर्जा देने के लिए (0,1)। इसलिए Jपरमाणु Oसीधे पर कूदता है "। फिर, पहले की तरह, सभी लेकिन "स्ट्रिंग मोड में मुद्रित होते हैं। बाद में, परमाणु |अपनी दिशा को उलटने के लिए हिट करता है, और फिर '"Oमुद्रण से गुजरता है "। अंतरिक्ष थोड़ा परेशान है, लेकिन यह आवश्यक लगता है, क्योंकि अन्यथा 'परमाणु |दर्पण के बजाय एक चरित्र के रूप में व्यवहार करेगा ।

दो परमाणुओं का उपयोग करके 8 बाइट्स

"'L;R@JO

इसके दो परमाणु हैं, जो बाएं से शुरू हो रहे हैं Lऔर दाएं से जा रहे हैं R। बायाँ-जा रहा परमाणु अपना मान सेट करता है '"जिसके द्वारा फिर तुरंत मुद्रित किया जाता है O(और परमाणु नष्ट हो जाता है)। दाएं-बाएं परमाणु के लिए, हम द्रव्यमान और ऊर्जा को फिर से स्वैप करते हैं, Oप्रिंट मोड में बाकी कोड को प्रिंट करने के लिए कूदते हैं । बाद में इसका मान निर्धारित किया जाता है 'Lलेकिन इससे कोई फर्क नहीं पड़ता क्योंकि परमाणु को तब छोड़ दिया जाता है ;


स्रोत में कोड / डेटा पृथक्करण की कमी के कारण तकनीकी रूप से अमान्य है।
कैलक्यूलेटरफनलीन

4
@CalculatorFeline '!+एन्कोड करता है "
मार्टिन एंडर

मैं विखंडन से परिचित नहीं हूं, लेकिन |R@JO"'काम करूंगा , या क्या आपको उसके बाद भी उस स्थान की आवश्यकता होगी '?
माइल्डलीवेटकास्ट

1
@ मिस्टाफिगिंस मुझे ऐसा लगता है, लेकिन इससे भी महत्वपूर्ण बात यह है कि आप 'पहले प्रिंट करेंगे ।
मार्टिन एंडर

24

क्रॉस-ब्राउज़र जावास्क्रिप्ट (41 अक्षर)

यह शीर्ष 5 वेब ब्राउज़र (IE> = 8, मोज़िला फ़ायरफ़ॉक्स, गूगल क्रोम, सफारी, ओपेरा) में काम करता है। इसे किसी एक में डेवलपर के कंसोल में दर्ज करें:

eval(I="'eval(I='+JSON.stringify(I)+')'")

यह "धोखा" नहीं है - क्रिस जस्टर-यंग की सिंगल-बाइट क्वीन के विपरीत, क्योंकि इसे आसानी से उपयोग करने के लिए संशोधित किया जा सकता है alert() फ़ंक्शन (14 वर्णों की लागत) :

alert(eval(I="'alert(eval(I='+JSON.stringify(I)+'))'"))

या एक बुकमार्कलेट में परिवर्तित (लागत 22 वर्ण):

javascript:eval(I="'javascript:eval(I='+JSON.stringify(I)+')'")

24

सी, 64 60 बाइट्स

main(s){printf(s="main(s){printf(s=%c%s%1$c,34,s);}",34,s);}

अब तक, यह सबसे कम ज्ञात C quine है। एक विस्तारित इनाम हैयदि आपको कोई छोटा मिल जाए तो ।

यह एक POSIX में GCC , क्लैंग और TCC में काम करता है वातावरण है। यह उन सभी के साथ अपरिभाषित व्यवहार की अत्यधिक मात्रा को आमंत्रित करता है।

बस मज़े के लिए, यहाँ एक रेपो है है जिसमें मेरे द्वारा ज्ञात सभी सी क़वाईस हैं। यदि आप पाते हैं या एक अलग लिखते हैं जो मौजूदा लोगों पर कुछ नया और रचनात्मक जोड़ता है, तो कांटा / पीआर के लिए स्वतंत्र महसूस करें।

ध्यान दें कि यह केवल ASCII वातावरण में काम करता है। यह EBCDIC के लिए काम करता है , लेकिन अभी भी POSIX की आवश्यकता है । वैसे भी POSIX / EBCDIC वातावरण पाने का सौभाग्य: पी


यह काम किस प्रकार करता है:

  1. main(s)mainवस्तुतः अप्राप्य चर घोषित करते हुए गालियां दी जाती हैं s। (ध्यान दें किs वास्तव में अप्रयुक्त नहीं है, लेकिन चूंकि सूचीबद्ध कंपाइलर इसे आवश्यक रूप से ऑटो-कास्ट करते हैं, इसलिए यह * भी हो सकता है।)
  2. printf(s="..."sप्रदान किए गए स्ट्रिंग पर सेट करता है और पहले तर्क को पास करता हैprintf
  3. s इस पर लगा है main(s){printf(s=%c%s%1$c,34,s);}
  4. %cASCII के लिए निर्धारित है 34, "। यह क्वीन को संभव बनाता है। अब sइस तरह दिखता है:
    main(s){printf(s="%s%1$c,34,s);} :।
  5. यह स्वयं के %sलिए सेट sहै, जो # 2 के कारण संभव है। अब sइस तरह दिखता है
    main(s){printf(s="main(s){printf(s=%c%s%1$c,34,s);}%1$c,34,s);}:।
  6. %1$cASCII 34 के लिए सेट है ", printfपहले ** तर्क 'रहा है। अब sइस तरह दिखता है:
    main(s){printf(s="main(s){printf(s=%c%s%1$c,34,s);}",34,s);}
    ... जो मूल स्रोत कोड होना चाहिए।

* उदाहरण धन्यवाद @Pavel लिए
, इस मामले में - फॉर्मेट स्पेसिफायर के बाद ** पहला तर्क s। प्रारूप विनिर्देश को संदर्भित करना असंभव है।


मुझे लगता है कि यह असंभव है कि यह किसी भी दृष्टिकोण के साथ कम हो जाएगा। यदि printfप्रारूप प्रारूप के माध्यम से पहुँचा जा सकता है $, यह 52 बाइट्स के लिए काम करेगा:

main(){printf("main(){printf(%c%0$s%1$c,34);}",34);}

हालांकि यह निश्चित रूप से प्रतिस्पर्धा के रूप में नहीं गिना जाना चाहिए, 1994 अंतर्राष्ट्रीय Obfuscated C कोड प्रतियोगिता, 1994_smr.c से "नियमों के सबसे खराब दुरुपयोग" के विजेता निश्चित रूप से कम है।
रे

@ रे इसकी अनुमति नहीं है। यह किसी भी परिभाषा से एक उचित क्वीन नहीं है। उस कार्यक्रम के कारण क्वीन नियमों को बदल दिया गया था: पी
एमडी एक्सएफ

मैं पूरी तरह से सहमत हूं, लेकिन यह एक दिलचस्प हैक है जो किसी भी समय का उल्लेख करने के लायक है किसी को सबसे छोटी ज्ञात क्वीन का उल्लेख है, यदि केवल ऐतिहासिक कारणों से।
रे

4
sप्रकार का है int, न कि "अप्रयुक्त चर"।
feersum

2
ये संकलक सभी जाहिरा तौर पर एक संकेतक के लिए एक सूचक के अंतर्निहित रूपांतरण की अनुमति देते हैं। s=3स्पष्ट रूप से काम नहीं करेगा क्योंकि आपको स्ट्रिंग को दो बार पास करने की आवश्यकता है printf
19

24

जावा, 528 बाइट्स:

एक मूल दृष्टिकोण के साथ एक जावा समाधान:

import java.math.*;class a{public static void main(String[]a){BigInteger b=new BigInteger("90ygts9hiey66o0uh2kqadro71r14x0ucr5v33k1pe27jqk7mywnd5m54uypfrnt6r8aks1g5e080mua80mgw3bybkp904cxfcf4whcz9ckkecz8kr3huuui5gbr27vpsw9vc0m36tadcg7uxsl8p9hfnphqgksttq1wlolm2c3he9fdd25v0gsqfcx9vl4002dil6a00bh7kqn0301cvq3ghdu7fhwf231r43aes2a6018svioyy0lz1gpm3ma5yrspbh2j85dhwdn5sem4d9nyswvx4wmx25ulwnd3drwatvbn6a4jb000gbh8e2lshp",36);int i=0;for(byte c:b.toByteArray()){if(++i==92)System.out.print(b.toString(36));System.out.print((char)c);}}}

पठनीय रूप में:

import java.math.*;
class a
{
    public static void main (String [] a)
    {
        BigInteger b=new BigInteger ("90ygts9hiey66o0uh2kqadro71r14x0ucr5v33k1pe27jqk7mywnd5m54uypfrnt6r8aks1g5e080mua80mgw3bybkp904cxfcf4whcz9ckkecz8kr3huuui5gbr27vpsw9vc0m36tadcg7uxsl8p9hfnphqgksttq1wlolm2c3he9fdd25v0gsqfcx9vl4002dil6a00bh7kqn0301cvq3ghdu7fhwf231r43aes2a6018svioyy0lz1gpm3ma5yrspbh2j85dhwdn5sem4d9nyswvx4wmx25ulwnd3drwatvbn6a4jb000gbh8e2lshp", 36); 
        int i=0; 
        for (byte c:b.toByteArray ())
        {
            if (++i==92) 
                System.out.print (b.toString (36)); 
            System.out.print ((char) c);
        }
    }
}

यह कैसे काम करता है?
लोवोजो

1
@ लोवोजो: अन्य समाधानों के समान है जो कोड को दो भागों में काटते हैं और पूरे स्ट्रिंग को सम्मिलित करते हैं जो कोड को फिर से अंदर डालते हैं, लेकिन पूरा कोड केवल एक स्ट्रिंग नहीं है, बल्कि बेस 36 (26 वर्णात्मक वर्ण + 10) में लंबी संख्या के रूप में एन्कोडेड है अंक)।
उपयोगकर्ता अज्ञात

1
इसे छोटा किया जा सकता है अगर आप डालते हैं if(++i==92),
tuskiomi

2
@tuskiomi: धन्यवाद, दो पात्रों के लिए छोटा
उपयोगकर्ता अज्ञात

1
@userunknown वास्तव में, a*जैसा कि जावा में सरणी से बाहर नहीं निकलता है, वह है सी। गोल्फ के कुछ अन्य भाग:, import java.math.*;class a{public static void main(String[]a){BigInteger b=new BigInteger("abc",36);int i=0;for(int c:b.toByteArray())System.out.printf("%s%c",++i==92?b.toString(36):"",c);}}जहां abcनए गणना किए गए मैजिक नंबर स्ट्रिंग होंगे। जावा में 8 यह भी बदलने के लिए संभव है class a{public static void mainकरने के लिए interface a{static void main, और जावा 10+ में यह भी बदलने के लिए संभव है import java.math.*;और BigInteger b=new BigInteger(करने के लिए var b=new java.math.BigInteger(
केविन क्रूज़सेन

23

मुर्गी , 7

chicken

नहीं, यह सीधे तौर पर गूँजता नहीं है :)


बेनाम: Damnit, तुम मुझे इसे करने के लिए :)
Taconut

यह गूंज नहीं है, यह स्ट्रिंग है chicken!
आउटगॉल्फ

कोई कोड / डेटा पृथक्करण, और इसलिए अमान्य नहीं है।
कैलक्यूलेटरफैन

10
@CalculatorFeline आपने नियम पढ़े?
तिमटेक

1
@JoKing मुझे नहीं लगता कि यह अमान्य है, क्योंकि चुनौती के नियम केवल शून्य-लंबाई और धोखा (अपने स्वयं के स्रोत फ़ाइल को पढ़ने) को रोकते हैं। केवल एक चीज जो अनुचित खानों को प्रतिबंधित करती है, एक मानक खामियों को छोड़कर - मानक खामियों को छोड़कर आमतौर पर उन उत्तरों पर लागू करने के लिए विचार नहीं किया जाता है जो उन्हें भविष्यवाणी करते हैं।
पिपरी

23

रेटिना , 20 14 9 7 बाइट्स

आरंभ करने से पहले, मैं उस फ़ाइल के तुच्छ समाधान का उल्लेख करना चाहता हूं जिसमें एक भी शामिल है 0। उस स्थिति में रेटिना गिनती करने की कोशिश करेगी0 खाली इनपुट में s , जिसका परिणाम भी है 0। मैं इस पर विचार नहीं करूंगा कि एक उचित क्वीन है।

तो यहाँ एक उचित है:

>\`
>\`

इसे ऑनलाइन आज़माएं!

वैकल्पिक रूप से, हम ;इसके बजाय उपयोग कर सकते हैं>

व्याख्या

कार्यक्रम में एक एकल प्रतिस्थापन होता है जिसे हम दो बार प्रिंट करते हैं।

पहली पंक्ति में, `रेगेक्स से कॉन्फ़िगरेशन को अलग करता है, इसलिए रेगेक्स खाली है। इसलिए रिक्त स्ट्रिंग (अर्थात गैर-मौजूद इनपुट) को दूसरी पंक्ति, वर्बेटिम के साथ बदल दिया जाता है।

परिणाम को दो बार प्रिंट करने के लिए, हम इसे दो आउटपुट चरणों में लपेटते हैं। भीतर वाला, \एक परिणामी लाइनफीड के साथ प्रिंट करता है, और बाहरी एक, >इसे बिना प्रिंट करता है।

यदि आप रेटिना से थोड़ा परिचित हैं, तो आप सोच रहे होंगे कि रेटिना के निहित उत्पादन का क्या हुआ। एक कार्यक्रम के अंतिम चरण को आउटपुट स्टेज में लपेटकर रेटिना के निहित उत्पादन का काम करता है। हालांकि, रेटिना ऐसा नहीं करता है, अगर अंतिम चरण पहले से ही आउटपुट चरण है। इसका कारण यह है कि एक सामान्य कार्यक्रम में यह विशेष उपयोगी है कि अंतर्निहित आउटपुट चरण को एक विशेष बाइट के साथ \या ;एक बाइट के साथ प्रतिस्थापित करने में सक्षम होने के बजाय (साथ ही .ध्वज के साथ निहित एक से छुटकारा पाने के लिए )। दुर्भाग्य से, यह व्यवहार हमें क्वीन के लिए दो बाइट्स की लागत को समाप्त करता है।


20

जावास्क्रिप्ट (36 चार)

(function a(){alert("("+a+")()")})()

यह AFAICT है, जो अब तक की सबसे छोटी जावास्क्रिप्ट क्वीन है।


1
यह प्रभावशाली है। आपको समझाना चाहिए कि यह मेरे लिए कैसे काम करता है 8- |
तेहरसीके

3
@TehShrike संकेत: आप सामग्री को एक स्ट्रिंग में सम्मिलित करके एक कार्य देख सकते हैं। उदाहरण के लिए, यदि आपके पास कोई फ़ंक्शन है a, तो आप कॉल करके इसकी सामग्री तक पहुंच सकते हैं a.toString
पीटर ओल्सन

7
पांडित्यपूर्ण होने के लिए, हालांकि, यह केवल एक क्वीन है यदि आपका जावास्क्रिप्ट कार्यान्वयन फ़ंक्शन aको उसी तरह से लागू करता है, जैसा कि ऊपर लिखा गया है। हालाँकि, इस कोड का उत्पादन किसी भी जावास्क्रिप्ट कार्यान्वयन पर एक क्वीन होने की संभावना है।
इल्मरी करोनें

1
यहाँ एक ही कुनैन है, 1 बाइट छोटी है !function a(){alert("!"+a+"()")}():।
इस्माईल मिगुएल

1
(a=()=>alert(($ {a})))()
डेनिस सी

19

GolfScript, 8 बाइट्स

मैंने हमेशा सोचा कि सबसे छोटा (सच्चा) गोल्फस्क्रिप्ट क्वीन 9 बाइट्स था:

{'.~'}.~

जहां ट्रेलिंग लाइनफीड आवश्यक है क्योंकि गोल्फस्क्रिप्ट डिफ़ॉल्ट रूप से एक ट्रेलिंग लाइनफीड प्रिंट करता है।

लेकिन मुझे बस एक 8-बाइट की क्वाइन मिली, जो उस लाइनफीड प्रतिबंध के आसपास बिल्कुल काम करती है:

":n`":n`

इसे ऑनलाइन आज़माएं!

तो पकड़ यह है कि GolfScript एक ट्रेलिंग लाइनफीड प्रिंट नहीं करता है, लेकिन यह nकार्यक्रम के अंत में सामग्री प्रिंट करता है । यह सिर्फ इतना है कि nशुरू करने के लिए एक लाइनफीड शामिल है। तो विचार यह है कि स्ट्रिंग के साथ प्रतिस्थापित करें ":n`", और फिर इसे स्ट्रिंग करें , जैसे कि स्टैक पर प्रतिलिपि उद्धरण के साथ और nबिना प्रिंट में संग्रहीत प्रतिलिपि ।

जैसा कि थॉमस क्वा ने बताया, 7-बाइट CJam क्वीन को 8-बाइट समाधान के लिए भी अनुकूलित किया जा सकता है:

".p"
.p

फिर, हमें अनुगामी लाइनफीड की आवश्यकता है।


6
गोल्फस्क्रिप्ट अजीब है।
कैलकुलेटरफ्लीन

19

भूलभुलैया , 124 110 53 बाइट्स

9 बाइट्स को बंद करने के लिए Sp3000 के लिए धन्यवाद, जिसने मुझे एक और 7 से गोल्फ के लिए अनुमति दी।

44660535853919556129637653276602333!
1
:_98
/8 %
@9_.

इसे ऑनलाइन आज़माएं!

व्याख्या

भूलभुलैया 101:

  • भूलभुलैया एक स्टैक-आधारित 2D भाषा है। स्टैक अथक है और शून्य से भरा है, इसलिए एक खाली स्टैक से पॉपिंग एक त्रुटि नहीं है।
  • निष्पादन पहले वैध चरित्र (यहां शीर्ष बाएं) से शुरू होता है। प्रत्येक जंक्शन पर, जहां निर्देश सूचक (आईपी) के लिए दो या अधिक संभावित रास्ते हैं, आगे जाने के लिए निर्धारित करने के लिए स्टैक के शीर्ष की जाँच की जाती है। नेगेटिव लेफ्ट है, जीरो आगे है और पॉजिटिव राइट है।
  • स्रोत कोड के अंक संबंधित संख्या को धक्का नहीं देते हैं - इसके बजाय, वे स्टैक के शीर्ष को पॉप करते हैं और धक्का देते हैं n*10 + <digit>। यह बड़ी संख्या में आसान इमारत की अनुमति देता है। एक नया नंबर शुरू करने के लिए, उपयोग करें _, जो शून्य को धक्का देता है।
  • " ऑप्स नहीं हैं।

सबसे पहले, मैं थोड़ा सरल संस्करण बताऊंगा जो एक बाइट लंबा है, लेकिन थोड़ा कम जादुई है:

395852936437949826992796242020587432!
"
:_96
/6 %
@9_.

इसे ऑनलाइन आज़माएं!

मुख्य विचार स्रोत के मुख्य शरीर को एक ही संख्या में सांकेतिक शब्दों में बदलना है, कुछ बड़े आधार का उपयोग करना। स्रोत कोड के शेष भाग को प्रिंट करने के लिए डिकोड किए जाने से पहले वह संख्या स्वयं आसानी से वापस प्रिंट की जा सकती है। डिकोडिंग केवल बार-बार किया जाने वाला अनुप्रयोग है divmod base, जहां प्रिंट करें modऔर divइसके शून्य तक काम करना जारी रखें ।

बचने के लिए {}, हमें उच्चतम वर्ण कोड की आवश्यकता होगी _(95) जैसे कि आधार 96 पर्याप्त है (आधार को कम रखकर, शुरुआत में संख्या कम है)। तो हम क्या सांकेतिक शब्दों में बदलना चाहते हैं:

!
"
:_96
/6 %
@9_.

उन वर्णों को उनके कोड बिंदुओं में बदलना और परिणाम को आधार -96 संख्या के रूप में माना जाता है (कम से कम महत्वपूर्ण अंकों के साथ !और सबसे महत्वपूर्ण एक के लिए ., क्योंकि यही वह क्रम है जिसमें हम संख्या को अलग कर देंगे), हमें मिलता है

234785020242697299628949734639258593

अब कोड एक सुंदर शांत चाल के साथ शुरू होता है (अगर मैं ऐसा कह सकता हूं) जो हमें एन्कोडिंग को वापस प्रिंट करने की अनुमति देता है और बहुत कम ओवरहेड के साथ डिकोडिंग के लिए एक और प्रतिलिपि रखता है: हम नंबर को रिवर्स में कोड में डालते हैं। मैंने इस सीजेएम स्क्रिप्ट के साथ परिणाम की गणना की तो चलो वास्तविक कोड पर चलते हैं। यहाँ शुरू है:

395852936437949826992796242020587432!
"

आईपी ​​शीर्ष बाएं कोने में शुरू होता है, पूर्व की ओर जा रहा है। हालांकि यह उन अंकों पर चलता है, यह बस स्टैक के शीर्ष पर उस संख्या को बनाता है। संख्या अपने आप में पूरी तरह से अर्थहीन है, क्योंकि हम जो चाहते हैं उसका उल्टा है। जब IP हिट करता है !, तो वह इस नंबर को स्टैक से हटाता है और प्रिंट करता है। यह सब आउटपुट में एन्कोडिंग को पुन: प्रस्तुत करने के लिए है।

लेकिन अब आईपी ने एक मृत अंत मारा है। इसका मतलब है कि यह चारों ओर घूमता है और अब वापस पश्चिम में जाता है ( !फिर से निष्पादित किए बिना )। इस बार, आसानी से, आईपी पीछे से सामने की ओर संख्या पढ़ता है, ताकि अब स्टैक के शीर्ष पर संख्या शेष स्रोत को एनकोड करें।

जब आईपी अब शीर्ष बाएं कोने को फिर से हिट करता है, तो यह एक मृत अंत नहीं है क्योंकि आईपी एक बाएं मोड़ ले सकता है, इसलिए यह करता है और अब दक्षिण की ओर बढ़ता है। "नो-सेशन कि हम यहाँ की जरूरत है कोड के मुख्य पाश से संख्या अलग करने के लिए है। बाते कर रहे हैं जिससे कि:

...
"
:_96
/6 %
@9_.

जब तक स्टैक के शीर्ष पर शून्य नहीं होता है, तब तक आईपी निम्नलिखित लूप में इस घने कोड के माध्यम से चलेगा:

"
>>>v
^< v
 ^<<

या रैखिक रूप से रखी गई:

:_96%._96/

लेबिरिंथ के नियंत्रण प्रवाह शब्दार्थ के कारण यह उन परिवर्तनों को लेता है। जब वर्तमान सेल में कम से कम तीन पड़ोसी होते हैं, तो आईपी एक नकारात्मक स्टैक मूल्य पर बाएं मुड़ जाएगा, एक शून्य पर आगे बढ़ेगा और एक सकारात्मक स्टैक मान पर दाएं मुड़ जाएगा। यदि चुनी गई दिशा संभव नहीं है क्योंकि दीवार है, तो आईपी इसके बजाय विपरीत दिशा लेगा (यही वजह है कि कोड में दो बाएं मोड़ हैं हालांकि स्टैक के शीर्ष कभी नकारात्मक नहीं है)।

लूप कोड ही वास्तव में बहुत सीधा है (इसे कसकर संकुचित नहीं किया गया है और जहां Sp3000 का मुख्य योगदान है:)

:    # Duplicate the remaining encoding number N.
_96  # Push 96, the base.
%.   # Take modulo and print as a character.
_96  # Push 96 again.
/    # Divide N by 96 to move to the next digit.

एक बार Nशून्य हिट करने के बाद , नियंत्रण प्रवाह परिवर्तन होता है। अब आईपी /(यानी पश्चिम) के बाद सीधे आगे बढ़ना चाहेंगे , लेकिन वहां एक दीवार है। इसलिए इसके बजाय अगर वह (पूर्व) घूमता है, 6फिर से निष्पादित करता है । यह स्टैक के शीर्ष को सकारात्मक बनाता है, इसलिए आईपी सही (दक्षिण) मुड़ता है और निष्पादित करता है 9। स्टैक का शीर्ष अब है 69, लेकिन हम इसकी परवाह करते हैं कि यह सकारात्मक है। आईपी ​​एक और सही मोड़ (पश्चिम) लेता है और उस पर चलता है @जो कोड को समाप्त करता है।

सब सब में, वास्तव में बहुत आसान है।

ठीक है, अब हम उस अतिरिक्त बाइट से कैसे किनारा करते हैं। स्पष्ट रूप से, यह नो-ओप बेकार लगता है, लेकिन हमें उस अतिरिक्त पंक्ति की आवश्यकता है: यदि लूप संख्या के समीप था, तो आईपी पहले से ही पूरी संख्या को ट्रेस करने के बजाय तुरंत वहां पहुंच जाएगा। तो क्या हम उस नो-ऑप के साथ कुछ उपयोगी कर सकते हैं।

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

हालांकि एक पकड़ है, हम ऐसा नहीं कर सकते हैं:

95852936437949826992796242020587432!
3
:_96
/6 %
@9_.

समस्या यह है कि अब हमने "a को बदल दिया है 3, जो उस वास्तविक संख्या को भी बदल देता है जो हम चाहते हैं। और यकीन है कि पर्याप्त संख्या में समाप्त नहीं होता है 3। चूंकि संख्या पूरी तरह से कोड से निर्धारित होती है, जिससे !हम उस बारे में बहुत कुछ नहीं कर सकते।

लेकिन शायद हम एक और अंक चुन सकते हैं? हम वास्तव में परवाह नहीं करते हैं कि क्या 3उस स्थान में कोई ऐसा समय है जब तक हम एक संख्या के साथ समाप्त हो जाते हैं जो स्रोत को सही ढंग से एन्कोड करता है। खैर, दुर्भाग्य से, 10 अंकों में से कोई भी एक एन्कोडिंग नहीं देता है जिसका कम से कम महत्वपूर्ण अंक चुने हुए से मेल खाता है। सौभाग्य से, कोड के शेष भाग में कुछ लेवे हैं जैसे कि हम बाइट काउंट को बढ़ाए बिना कुछ और एन्कोडिंग की कोशिश कर सकते हैं। मुझे तीन विकल्प मिले हैं:

  1. हम बदल सकते हैं @करने के लिए /। उस स्थिति में हम किसी भी अंक का उपयोग कर सकते हैं 1357और एक मिलान एन्कोडिंग प्राप्त कर सकते हैं । हालांकि, इसका मतलब यह होगा कि कार्यक्रम तब एक त्रुटि के साथ समाप्त होता है, जिसकी अनुमति है लेकिन बहुत साफ नहीं लगता है।
  2. रिक्त स्थान केवल "दीवार" वर्ण नहीं हैं। हर अप्रयुक्त चरित्र, विशेष रूप से सभी अक्षर हैं। यदि हम एक ऊपरी मामले पत्र का उपयोग करते हैं, तो हमें इसे समायोजित करने के लिए आधार बढ़ाने की आवश्यकता नहीं है (क्योंकि उन कोड बिंदु नीचे हैं _)। 26 विकल्प बहुत संभावनाएं देते हैं। जैसे के लिएA किसी भी अजीब अंकों काम करता है। यह थोड़ा अच्छा है, लेकिन यह अभी भी यह सब बहुत सुंदर नहीं लगता है, क्योंकि आप कभी भी वास्तविक कोड में एक पत्र का उपयोग नहीं करेंगे।
  3. हम अधिक से अधिक आधार का उपयोग कर सकते हैं। जब तक हम आधार में काफी वृद्धि नहीं करते हैं, तब तक एन्कोडिंग में दशमलव अंकों की संख्या समान रहेगी (विशेष रूप से, 104 तक का कोई भी आधार ठीक है, हालांकि 99 से परे के आधारों को वास्तव में कोड में अतिरिक्त वर्णों की आवश्यकता होगी)। सौभाग्य से, आधार 98 एक एकल मिलान समाधान देता है: जब हम अंक का उपयोग करते हैं 1, तो एन्कोडिंग भी समाप्त हो जाती है 1। यह आधार 96, 97, 98, 99 के बीच एकमात्र समाधान है, इसलिए यह वास्तव में बहुत भाग्यशाली है। और इस तरह हम इस उत्तर के शीर्ष पर कोड के साथ समाप्त होते हैं।

19

खोया , 293 262 249 बाइट्स

>:2+52*:6*:(84*+75*):>:::::[[[[[[[:[(52*)>::::[[[[[[:[84*+@>%?!<((((((((((([[[[[[[[[[[[[[ "
\#<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\

इसे ऑनलाइन आज़माएं!

व्याख्या

यह पूरा प्रोजेक्ट अप एंड डाउन रहा है। मैं सोचता रहा कि यह असंभव है और फिर एक पागल विचार के साथ आ रहा हूं जो बस काम कर सकता है।

लॉस्ट क्वीन इतनी मेहनत क्यों है?

जैसा कि आप जानते हैं कि लॉस्ट एक 2 डी प्रोग्रामिंग भाषा है जहां प्रारंभ स्थान और दिशा पूरी तरह से यादृच्छिक है। यह किसी भी खोए हुए प्रोग्राम को लिखना मुश्किल बनाता है क्योंकि रेडिएशन हार्ड कोड लिखना मुश्किल है। आपको हर संभावित स्थान और दिशा पर विचार करना होगा।

कहा जा रहा है कि चीजों को करने के कुछ मानक तरीके हैं। उदाहरण के लिए यहां एक स्ट्रिंग को प्रिंट करने का मानक तरीका है।

>%?"Stringv"(@
^<<<<<<<<<<<<<

इसके निचले हिस्से में एक संग्रह स्ट्रीम है जो सबसे अधिक ips को पकड़ता है और उन्हें प्रारंभ स्थान पर खींचता है। एक बार जब वे पहुँच स्थान (ऊपरी बाएँ) शुरू कर देते हैं, तो हम उन्हें एक लूप से साफ कर देते हैं, जिससे स्टैक पर मौजूद सभी मूल्यों से छुटकारा मिल जाता है और फिर स्ट्रिंग और बाहर निकलने की सुरक्षा को चालू करते हैं। (सेफ्टी एक कॉन्सेप्ट यूनिक है जिसे लॉस्ट हर प्रोग्राम को हिट करना होगा% से बाहर निकलने से पहले , इससे प्रोग्राम के शुरू होने की संभावना खत्म हो जाती है)। अब मेरा विचार इस फॉर्म को पूर्ण विकसित क्वीन में विस्तारित करना होगा।

पहली चीज जो लूप को थोड़ा सा काम करना था, मौजूदा लूप स्ट्रिंग प्रारूप के लिए विशिष्ट था।

>%?!<"Stringv"(@
^<<<<<<<<<<<<<<<
^<<<<<<<<<<<<<<<

की संभावना से बचने के लिए हमें दूसरी धारा जोड़ने की जरूरत है ! ऊपर कूदने और एक लूप बनाने ।

अब हम इसे मानक क्विन प्रारूप के साथ मिलाना चाहते हैं। चूंकि लॉस्ट क्लेन पर बहुत अधिक आधारित है, इसलिए मैंने मार्टिन एंडर के लिए मूल रूप से क्लेन क्वीन उधार ली है ।

:2+@>%?!< "
<<<<^<<<<<<
<<<<^<<<<<<

यह काफी आसानी से क्वीन की पहली पंक्ति को प्रिंट करता है। अब हमें केवल धाराओं को हार्ड-कोड करना है। वैसे यह कहा से आसान है। मैंने ऐसा करने के लगभग चार अलग-अलग तरीकों की कोशिश की। मैं सिर्फ उसी का वर्णन करूंगा जिसने काम किया है।

वांछित विचार तीरों की वांछित संख्या प्राप्त करने के लिए दरवाजों का उपयोग करना है। डोर एक विशेष प्रकार का दर्पण है जो हिट होने पर हर बार बदलता है। [बाएं ]से और दाईं ओर से आने वाले ips को दर्शाता है । जब वे इन दोनों में से किसी एक IP से टकराते हैं तो स्विच ओरिएंटेशन होता है। हम बार-बार ऑपरेशन करने के लिए इन दरवाजों की एक पंक्ति और एक स्थिर परावर्तक बना सकते हैं।

>:[[[

:तीन बार प्रदर्शन करेंगे । इस तरह अगर हम <हाथ से पहले स्टैक को धक्का देते हैं तो हम कम बाइट के साथ उनमें से बहुत कुछ कर सकते हैं। हम इनमें से 2 बनाते हैं, प्रत्येक पंक्ति के लिए एक, और उनके बीच में हम एक नई लाइन बिछाते हैं, हालांकि दूसरी एक को केवल तब तक जाना पड़ता है जब तक कि !हम इसे कवर नहीं कर देते हैं, इसके अलावा कुछ और खाली बाइट हमें बचा सकते हैं। ठीक है अब हमें अपनी धाराओं में ऊर्ध्वाधर तीर जोड़ने की आवश्यकता है। यह वह जगह है जहां कुंजी अनुकूलन अंदर आता है। कार्यक्रम के "आरंभ" के लिए सभी ips को सीधे रीडायरेक्ट करने के बजाय हम उन्हें दूर के बाईं ओर रीडायरेक्ट करेंगे, क्योंकि हम पहले से ही जानते हैं कि ips को बाईं ओर शुरू करना करना होगाकाम (या कम से कम अंतिम संस्करण में काम करेगा) हम अन्य कूल्हों को भी पुनर्निर्देशित कर सकते हैं। यह न केवल बाइट्स में सस्ता बनाता है, मुझे लगता है कि यह अनुकूलन वह है जो क्वीन को संभव बनाता है।

हालांकि, अभी भी कुछ समस्याएं हैं, सबसे महत्वपूर्ण एक >है जिसे धकेलने के बाद शुरू किया जाना चाहिए, लेकिन इससे पहले कि हम इसकी प्रतियां बनाना शुरू कर दें। ऐसे इप्स कॉपियर में प्रवेश करेंगे और 0. की प्रतियों का एक गुच्छा बनाएंगे। यह बुरा है क्योंकि हमारे स्टैक क्लीयरिंग तंत्र शून्य के पूरे समूह को छोड़कर, स्टैक के निचले भाग को निर्धारित करने के लिए शून्य का उपयोग करता है। हमें एक मजबूत स्टैक स्वच्छता पद्धति को जोड़ने की आवश्यकता है। चूंकि स्टैक खाली है, यह बताने का कोई वास्तविक तरीका नहीं है, हमें बस स्टैक पर अधिक से अधिक वस्तुओं को नष्ट करने का प्रयास करना होगा। यहां हम एक बार फिर पहले बताई गई डोर विधि का उपयोग करेंगे। हम ((((((((((([[[[[[[[[[[[[[शून्य से छुटकारा पाने के लिए सैनिटिज़ोर के ठीक बाद पहली पंक्ति के अंत में जोड़ देंगे ।

अब एक और समस्या है, क्योंकि हमने अपनी धाराओं को ऊपरी बाएँ ips पर पुनर्निर्देशित कर दिया है %और नीचे की ओर बढ़ना पहले से ही सुरक्षा को बंद कर दिया है और समय से पहले बाहर निकल जाएगा। इसलिए हमें सुरक्षा को बंद करने की आवश्यकता है। हम इसे #धारा में जोड़कर करते हैं, इस तरह धारा के माध्यम से बहने वाले जहाजों को बंद कर दिया जाएगा, लेकिन पहले से ही साफ किए गए ips नहीं होंगे। #भी मुश्किल के रूप में अच्छी तरह से पहले लाइन में कोडित किया जाना चाहिए।

यही है, उम्मीद है कि आप समझ गए होंगे कि अब यह कैसे काम करता है।


: / इतने सारे टाइपो और लापता लिंक
केवल

17

यूप , 1165 879 606 561 540 522 498 + 7 = 505 बाइट्स

-cheatउपनाम की परिभाषा की अनुमति देने के लिए ध्वज की आवश्यकता होती है ।

022222120211111102222122021121202222212021112202222110222212202112110222221202122212022222102222212021222120222221022222102222210222221202222110222211022222210222221022222210222212202222221022221102211110222221022221220222212202112120221111022212202211210222212022222102211120222122022111202222120212212021221202222221022111102221210222122022222102222120212212022221102211110222122022221102222120212212022112120221111022212202112120222212=%;0e-=<;0<-=>;:0~--=1;1>=2;0%{{>0<~{~>~<<}>>>]}>]}${<#}%{@}

इसे ऑनलाइन आज़माएं!

व्याख्या

इसके दो भाग हैं (अधिकांश खदानों के साथ)। आँकड़े:

022222120211111102222122021121202222212021112202222110222212202112110222221202122212022222102222212021222120222221022222102222210222221202222110222211022222210222221022222210222212202222221022221102211110222221022221220222212202112120221111022212202211210222212022222102211120222122022111202222120212212021221202222221022111102221210222122022222102222120212212022221102211110222122022221102222120212212022112120221111022212202112120222212

और डिकोडर:

=%;0e-=<;0<-=>;:0~--=1;1>=2;0%{{>0<~{~>~<<}>>>]}>]}${<#}%{@}

डेटा डिकोडर (या बल्कि इसके रिवर्स) का एक द्विआधारी एन्कोडिंग है। प्रत्येक 0एक नया चरित्र शुरू करता है और 1s और 2s क्रमशः 0- और 1-बिट्स हैं।

ध्यान दें कि 0एक मानक हाँ आदेश जो एक शून्य धक्का है, जबकि है 1और 2इस बिंदु पर परिभाषित नहीं कर रहे हैं। हालांकि, हम आदेश करने के लिए पूरे डेटा हिस्सा आवंटित %ताकि 1और 2अपरिभाषित रह सकते हैं जब तक %वास्तव में प्रयोग किया जाता है।

अगला, हम कुछ और आदेशों को परिभाषित करते हैं:

0e-=<;
0<-=>;
:0~--=1;
1>=2;

<स्टैक के शीर्ष को घटाता है, >इसे बढ़ाता है। 1(कुछ अनजाने में) स्टैक के शीर्ष को दोगुना कर देता है। 2इसे दोगुना करता है और फिर इसे बढ़ाता है। इन परिभाषाओं के लिए धन्यवाद, कुछ ऐसा 0221111होगा जो वास्तव में ढेर पर एक 48 (110000 बाइनरी में) छोड़ देगा।

शेष 32 बाइट्स दो भागों में वास्तविक डिकोडिंग करते हैं। पहले हमें डेटा स्ट्रिंग को फिर से संगठित करना होगा।

0%                ` Push a zero and then the data.
{                 ` For each value...
  {               `   Until that value is zero...
    >0<~{~>~<<}>  `   divmod 2. The div is the input to the next iteration,
                  `   the mod gives us the next bit.
    >>]           `   Increment twice (gives 2 or 3) and put at the bottom
                  `   of the stack.
  }
  >]              ` Increment the 0 and put it at the bottom as well.
}
$                 ` Reverse the entire stack.
{<#}              ` Decrement and print each number.

और अंत में, हम डेटा को फिर से धक्का देते हैं और प्रत्येक मान को एक चरित्र के रूप में प्रिंट करते हैं:

%{@}

भविष्य के संदर्भ के लिए, यहां डेटा को एन्कोड करने के लिए सीजेएम स्क्रिप्ट है।


17

फ्यू , 423 बाइट्स

Fueue एक कतार आधारित esolang जिसमें चल रहे प्रोग्राम है है कतार।

)$$4255%%1(~):[)$$24%%0:<[~:)~)]~[$11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<]](H-):~:[)[):~[)~:~~([:~)*[):~[$1(+48]):~+]-:~~)10)~~]/]+:5):]~:](106328966328112328136317639696111819119696281563139628116326221310190661962811611211962861109696289611619628116111612896281115421063633063961111116163963011632811111819159628151213262722151522061361613096119619190661966311961128966130281807072220060611612811961019070723232022060611

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

यह स्पष्टीकरण हाथ से निकलने का रास्ता हो भी सकता है और नहीं भी । दूसरी ओर मैं नहीं जानता कि यह कैसे व्याख्या करने के लिए बहुत एक तरह से मुझे आशा है कि लोगों का पालन कर सकते में कम।

मुदा छल चादर

इस कार्यक्रम में उपयोग नहीं की जाने वाली कुछ विशेषताओं सहित विवरणों के लिए esolang wiki लेख देखें ।

  • प्रारंभिक कार्यक्रम कतार की प्रारंभिक स्थिति है, जिसमें निम्नलिखित तत्व शामिल हो सकते हैं:

    • पूर्णांक शाब्दिक (स्रोत में केवल गैर-नकारात्मक, लेकिन नकारात्मक की गणना की जा सकती है), उन्हें निष्पादित करके एक चरित्र प्रिंट करता है।
    • स्क्वायर-ब्रैकेट सीमांकित नेस्टेड ब्लॉक, निष्क्रिय (संरक्षित बरकरार जब तक कि कुछ फ़ंक्शन उन पर कार्य नहीं करता है)।
    • कार्य, उनके तर्क कतार में तुरंत उनका अनुसरण करने वाले तत्व हैं:
      • +*/-%: पूर्णांक अंकगणित ( -एकात्मक, %तार्किक निषेध) है। यदि संख्या तर्क नहीं दिए गए हैं तो निष्क्रिय करें।
      • ()<: कोष्ठक में तत्व डालें, ब्लॉक से कोष्ठक निकालें, ब्लॉक में अंतिम तत्व जोड़ें। बाद के दो अक्रिय हैं जब तक कि एक ब्लॉक द्वारा पीछा नहीं किया जाता है।
      • ~:: स्वैप, डुप्लिकेट।
      • $: कॉपी (संख्या + तत्व लेता है)। गैर-संख्या से पहले जड़ता।
      • H: पड़ाव कार्यक्रम।

    ध्यान दें कि []घोंसला बनाते समय , ()नहीं - उत्तरार्द्ध बस अलग-अलग कार्य हैं।

निष्पादन ट्रेस सिंटैक्स

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

  • जब कोई फ़ंक्शन निष्पादित होता है, तो यह और इसके तर्क आसपास के तत्वों से रिक्त स्थान के साथ सेट किए जाएंगे। यदि कुछ तर्क जटिल हैं, तो उनके बीच एक स्थान भी हो सकता है।
  • कई निष्पादन निशान बाईं ओर एक "देरी बूँद" में विभाजित हैं, एक हिस्से से दाईं ओर अलग हो जाते हैं जो पर्याप्त डेटा हेरफेर करता है। अगला भाग देखें

{}गणितीय अभिव्यक्तियों के पूर्णांक परिणाम को दर्शाने के लिए घुंघराले कोष्ठक (फ़्यू में प्रयुक्त नहीं) का उपयोग निशान में किया जाता है। इसमें नकारात्मक संख्याएं शामिल हैं, क्योंकि Fueue में केवल गैर-नकारात्मक शाब्दिक हैं - नकारात्मक -कार्य है।

विभिन्न पैमाइश योग्य नाम और ...मान और संक्षिप्त को दर्शाने के लिए उपयोग किए जाते हैं।

देरी की रणनीति

सहज रूप से, कतार के चारों ओर निष्पादन चक्र, आंशिक रूप से यह संशोधित करता है कि यह किस माध्यम से गुजरता है। किसी फ़ंक्शन के परिणामों को अगले चक्र तक फिर से कार्य नहीं किया जा सकता है। जब तक वे बातचीत नहीं करते हैं, तब तक कार्यक्रम के विभिन्न भाग समानांतर रूप से विकसित होते हैं।

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

ये रणनीति हमेशा नीचे में व्यक्तिगत रूप से उल्लिखित नहीं होगी:

  • )[A]Aएक चक्र के लिए देरी । (संभवतः सबसे आसान और सबसे पठनीय विधि।)
  • ~efतत्वों को स्वैप करता है eऔर fजो उनके निष्पादन में देरी करता है। (संभवतः कम से कम पठनीय, लेकिन अक्सर मामूली देरी के लिए सबसे छोटा।)
  • $1eएक भी तत्व देरी करता है e
  • -और %विलंब संख्या के लिए उपयोगी हैं (बाद के लिए 0और 1)
  • एक पंक्ति में कई समान तत्वों में देरी करते समय, :या $उन्हें एक ही से बनाने के लिए उपयोग किया जा सकता है।
  • (nnकोष्ठक में लपेटता है, जिसे बाद में सुविधानुसार हटाया जा सकता है। यह संख्यात्मक गणनाओं के लिए विशेष रूप से महत्वपूर्ण है, क्योंकि संख्याओं को बहुत अधिक अस्थिर किया जाता है, यहां तक ​​कि पहली बार उन्हें एक ब्लॉक में लगाए बिना भी कॉपी किया जा सकता है।

समग्र संरचना

बाकी विवरण को सात भागों में विभाजित किया गया है, प्रत्येक चल रहे कार्यक्रम के एक भाग के लिए है। बड़े चक्र जिसके बाद उनमें से ज्यादातर खुद को दोहराते हैं, उन्हें पूरी कतार से गुजरने वाले एकल के "चक्र" से अलग करने के लिए "पुनरावृत्तियों" कहा जाएगा।

यहां बताया गया है कि प्रारंभिक कार्यक्रम उनके बीच कैसे बांटा गया है:

A:  )$$4255%%1(~
B:  ):[)$$24%%0:<[~:)~)]~[$11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<]]
C:  
D:  (H-
E:  
F:  
G:  ):~:[)[):~[)~:~~([:~)*[):~[$1(+48]):~+]-:~~)10)~~]/]+:5):]~:](106328966328112328136317639696111819119696281563139628116326221310190661962811611211962861109696289611619628116111612896281115421063633063961111116163963011632811111819159628151213262722151522061361613096119619190661966311961128966130281807072220060611612811961019070723232022060611

कार्यक्रम के अंत में बड़ा अंक बाकी को रिवर्स में एनकोड करता है, प्रति वर्ण दो अंक, प्रत्येक एएससीआईआई मूल्य से 30 घटाया जाता है (इसलिए जैसे 10एनकोडिंग एक( ।)

उच्च स्तर पर आप इस कार्यक्रम में डेटा (बाइनम के साथ शुरू) के बारे में सोच सकते हैं जैसा कि दाएं से बाएं ओर बह रहा है, लेकिन बाएं से दाएं बहने पर नियंत्रण है। हालाँकि, निचले स्तर पर फ़्यूए कोड और डेटा के बीच के अंतर को हर समय बनाए रखता है।

  • खंड G सबसे पहले महत्वपूर्ण अंकों को विभाजित करते हुए ASCII अंकों (जैसे 0पूर्णांक के रूप में अंक 48) में bignum को डिकोड करता है । यह हर 15 चक्र में एक अंक उत्पन्न करता है।
  • अनुभाग एफ में उत्पादित अंक ASCII मान शामिल हैं (प्रत्येक खंड के अंदर) जब तक खंड ई उन्हें उपभोग नहीं कर सकता है।
  • खंड ई एक बार में उत्पादित अंकों को संभालता है, उन्हें प्रपत्र के ब्लॉकों में बाँधता है [x[y]] बाँधती है, प्रत्येक जोड़ी के एन्कोडेड चरित्र को भी प्रिंट करती है।
  • सेक्शन डी में एक गहरी नेस्टेड ब्लॉक होता है जो धीरे-धीरे [x[y]]ब्लॉकों से इस तरह से निर्मित होता है कि एक बार जब इसमें सभी अंक होते हैं, तो यह उन सभी को प्रिंट करने के लिए चलाया जा सकता है, फिर पूरे कार्यक्रम को रोक दें।
  • सेक्शन सी, सेक्शन डी के निर्माण को संभालता है, और सेक्शन ई को फिर से बनाता है।
  • सेक्शन B सेक्शन C के साथ-साथ हर 30 साइकल को भी रीक्रिएट करता है।
  • धारा A अन्य खंडों के अंतिम पुनरावृत्ति होने तक चक्रों की गणना करता है। फिर यह सेक्शन बी को निरस्त करता है और सेक्शन डी को चलाता है।

खंड एक

धारा ए कार्यक्रम के अंत का समय निर्धारण करता है। एकल स्वैप फ़ंक्शन को कम करने के लिए 4258 चक्र लगते हैं ~, जो तब खंड बी के लिए एक समायोजन करता है जो इसके मुख्य लूप को रोकता है और इसके बजाय अनुभाग डी को चलाना शुरू करता है।

)$ $4255% %1 (~
)$%%%...%% %0 [~]
)$%%%...% %1 [~]
⋮
)$ %0 [~]
) $1[~]
)[~]
~
  • एक $फ़ंक्शन ब्रैकेट्स में लपेटते %समय निम्नलिखित की 4255 प्रतियां बनाता है ।(~
  • प्रत्येक चक्र को अंतिम %संख्या के बीच 0और निम्न संख्या को चालू करने के लिए उपयोग किया जाता है 1
  • जब सभी %एस का उपयोग किया जाता है, तो (प्रभावी रूप से एक एनओपी) $1की 1 प्रति बनाता है [~], और अगले चक्र पर )कोष्ठक हटाता है।

अनुभाग बी

सेक्शन बी अपने आप को पुनर्जीवित करने के साथ-साथ सेक्शन सी के प्रत्येक 30 चक्रों के एक नए पुनरावृत्ति को भी संभालता है।

) : [)$$24%%0:<[~:)~)]~[$11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<]]
) [)$$24%%0:<[~:)~)]~[$11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<]]            [BkB]
)$ $24%     %0  :<  [~:)~)]    ~ [$11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<] [BkB]
)$ %...%%% %1   < < [~:)~)] [BkB]   [$11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<]
)$ %...%% %0      < [~:)~)[BkB]] [$11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<]
)$ %...% %1         [~:)~)[BkB][$11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<]]
⋮
) $1 [~:)~)[BkB][$11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<]]
) [~:)~)[BkB][$11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<]]                    (1)
~:) ~)[BkB]                 [$11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<]
) : [BkB]                 ) [$11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<]      (2)
) [BkB] [BkB]               $11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<
  • एक :बड़ा ब्लॉक निम्नलिखित (एक प्रति के रूप में संक्षिप्त डुप्लिकेट [BkB]), तो )पहले प्रतिलिपि से कोष्ठक निकाल देता है।
  • $$24%%0 अनुभाग A में एक के समान एक उलटी गिनती सेट करता है।
  • हालांकि यह नीचे गिना जाता है, :<बदल जाता है <<, और ~दो खंडों को स्वैप करता है , एक नए अनुभाग C के लिए कोड को अंतिम रूप देता है।
  • दो <फ़ंक्शन दो अंतिम ब्लॉकों को पहले एक में पैक करते हैं - यह सामान्य पुनरावृत्तियों में निरर्थक है, लेकिन ~खंड ए से अंत में अपना काम करने की अनुमति देगा ।
  • (1) जब उलटी गिनती समाप्त हो जाती है, )तो बाहरी कोष्ठक हटा दिए जाते हैं। अगला अनुभाग C कोड की शुरुआत ~:)में बदल जाता है ):और ~)स्वैप हो जाता है )
  • (2) सेक्शन बी अब अपने प्रारंभिक चक्र पर वापस आ गया है, जबकि एक )बस सी के नए खंड को चलाने के लिए कोष्ठक को हटाने के बारे में है।

अंतिम पुनरावृत्ति में, ~खंड A से बिंदु (1) ऊपर दिखाई देता है:

~ ) [~:)~)[BkB][$11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<]]                  (1)
[~:)~)[BkB][$11~)~<[[+$4--498+*-:~-10)):])<~][)))~]<]]              )

~स्वैप )ब्लॉक भर में और धारा सी में, से खंड बी को रोकने को पुन: चलाने जा रहा है।

अनुभाग सी

धारा सी नए अंकों के चरित्र जोड़े को खंड डी के ब्लॉक में विलय करता है, और अनुभाग ई के नए पुनरावृत्तियों को भी बनाता है।

नीचे के साथ एक विशिष्ट यात्रा से पता चलता xहै और yअंक 'ASCII कोड का प्रतिनिधित्व। बहुत पहले पुनरावृत्ति में, आने वाले "डी" और "ई" तत्व प्रारंभिक हैं [H]और -इसके बजाय, जैसा कि कोई भी पिछला अनुभाग ई किसी भी अंक चरित्र जोड़े का उत्पादन करने के लिए नहीं चला है।

C                                               D             E
$11~ )  ~<[[+$4--498+*-:~-10)):])<~]  [)))~]  < [)))~[...]]   [x[y]]
~~~ ~~~ ~~~ ~~) [[+$4--498+*-:~-10)):])<~]  < [)))~] [)))~[...][x[y]]]
~~~ ~~~     )  ~ [[+$4--498+*-:~-10)):])<~] [)))~[)))~[...][x[y]]]]
~~~       ~ )   [)))~[....]]                                  [[+$4--498+*-:~-10)):])<~]
                                              ~~[)))~[....]] )[[+$4--498+*-:~-10)):])<~]
                                                [)))~[....]]  ~[+$4--498+*-:~-10)):])<~
  • यह सिंक्रनाइज़ेशन की एक अलग विधि का उपयोग करता है जिसे मैंने इस उत्तर के लिए खोजा था। जब आपके पास ~एक पंक्ति में कई स्वैप कार्य होते हैं , तो पंक्ति प्रत्येक चक्र में लगभग 2/3 तक सिकुड़ जाएगी (क्योंकि एक ~दो के बाद स्वैप होता है), लेकिन कभी-कभी शेष ~एस के साथ जो कि इस प्रकार सावधानी से कहर बरपाता है।
  • $11~ऐसी पंक्ति पैदा करता है। अगले खंड में अगले ~स्वैप होता है <<अंत में दूसरा एक नया डिजिट पेयर ब्लॉक (अंक एक्स और वाई को एएससीआईआई कोड के रूप में) खंड डी ब्लॉक में जोड़ता है।
  • अगले चक्र में, ~पंक्ति में एक ~~शेष है, जो ~निम्नलिखित पर एक स्वैप करता है )। अन्य <खंड डी को एक [)))~]ब्लॉक में जोड़ता है ।
  • इसके बाद ~स्वैप किया गया नया खंड ई कोड के साथ निम्नलिखित खंड को स्वैप करता है। फिर एक नया बचे हुए भाग में ~एक स्वैप होता है ), और अंत में पंक्ति के अंतिम भाग ~~में से ~एक को खंड E पर स्वैप करता है जैसे कि )उसके ब्रैकेट को हटा दिया है।

अंतिम पुनरावृत्ति में, अनुभाग ए ~ने )खंड बी और खंड सी में स्वैप किया है । हालांकि, अनुभाग सी इतना अल्पकालिक है कि यह पहले से ही गायब हो गया है, और )अनुभाग डी की शुरुआत में समाप्त होता है।

अनुभाग डी

अनुभाग डी अंतिम बड़े अंक को प्रिंट करने और कार्यक्रम को रोकने का काम करता है। अधिकांश कार्यक्रम चलाने के दौरान, यह एक निष्क्रिय ब्लॉक है जो B-G निर्माण पर सहयोग करता है।

    (H -
    [H]-
    ⋮
    [)))~[H-]]                  After one iteration of section C
    ⋮
    [)))~[)))~[H-][49[49]]]]    Second iteration, after E has also run
    ⋮
)   [)))~[...]]     [49[48]]    Final printing starts as ) is swapped in
    ))) ~[...][49[48]]
    )) )[49[48]] [...]
    )) 49 [48][...]             Print first 1
    ) )[48] [...]
    ) 48 [...]                  Print 0
    )[...]                      Recurse to inner block
    ...
    ⋮
    )[H-]                       Innermost block reached
    H -                         Program halts
  • कार्यक्रम के पहले चक्र में, कोष्ठक में (रुकने के कार्य को लपेटता है H। ए- अनुसरण करता है, इसे डिजिट जोड़ी के बजाय पहले पुनरावृत्ति के लिए डमी तत्व के रूप में उपयोग किया जाएगा।
  • निगमित की गई पहली वास्तविक अंक जोड़ी [49[49]], 11अंक में अंतिम के समान है ।
  • बहुत अंतिम अंकों की जोड़ी [49[48]]( 10अंक के आरंभ में) वास्तव में ब्लॉक में शामिल नहीं है, लेकिन इससे कोई अंतर नहीं पड़ता है )[A[B]]और )[A][B]दोनों बराबर हो जाते हैं A[B]

अंतिम पुनरावृत्ति के बाद, )खंड B से दाईं ओर स्वैप किया जाता है और अनुभाग D ब्लॉक को डीबॉक किया जाता है। )))~प्रत्येक उप-खंड की शुरुआत में यह सुनिश्चित करें कि सभी भागों सही क्रम में क्रियान्वित कर रहे हैं बनाता है। अंत में अंतरतम ब्लॉक में एक Hरुकने वाला कार्यक्रम होता है।

अनुभाग ई

सेक्शन E, सेक्शन G द्वारा निर्मित ASCII अंकों के युग्मों को संभालता है, और दोनों संबंधित एन्कोडेड वर्ण को प्रिंट करता है और संयुक्त जोड़ी के साथ ब्लॉक को C और D को छोड़ता है।

फिर नीचे के साथ एक विशिष्ट यात्रा से पता चलता xहै और yअंक 'ASCII कोड का प्रतिनिधित्व।

E                                                   F
~ [+$4--498+*-:~-10)):] )              <  ~         [y] [x]
) [+$4--498+*-:~-10)):]                   < [x] [y]
+ $4-  - 498  +*- :~ -10 ) )              : [x[y]]
+---  -{-498} +*- ~~{-10} )       ) [x[y]]  [x[y]]
+--    - 498  +*   -{-10}       ~ ) x  [y]  [x[y]]
+-    -{-498} +               * 10 x  )[y]  [x[y]]
+      - 498                    + {10*x} y  [x[y]]
                         + {-498} {10*x+y}  [x[y]]
{10*x+y-498}  [x[y]]
[x[y]]
  • आने वाले अंक ब्लॉकों को स्वैप किया जाता है, फिर y ब्लॉक को x ब्लॉक में जोड़ा जाता है, और पूरे जोड़ी ब्लॉक को कॉपी किया जाता है। एक प्रतिलिपि तब तक छोड़ दी जाएगी जब तक कि अनुभाग C और D के लिए अंत नहीं होगा।
  • अन्य प्रतिलिपि को फिर से डीबॉक किया जाता है, फिर गणना करने के लिए अंकगणितीय कार्यों का एक क्रम लागू होता है 10*x+y-498, एन्कोडिंग वर्ण का ASCII मान। 498 = 10*48+48-30, 48एस के ASCII एन्कोडिंग पूर्ववत xऔर yजबकि 30पाली से एन्कोडिंग 00–99के लिए30–129 है, जो सभी प्रिंट योग्य ASCII भी शामिल है।
  • परिणामी संख्या को निष्पादित करने के लिए छोड़ दिया जाता है, जो इसके चरित्र को प्रिंट करता है।

अनुभाग एफ

धारा F में ASCII अंकों के कोड वाले निष्क्रिय ब्लॉक होते हैं। कार्यक्रम के अधिकांश भाग के लिए यहां दो सबसे अधिक संख्या में होंगे, चूंकि खंड ई उन्हें उसी गति से खपत करता है जो जी उनके साथ पैदा करता है। हालांकि, अंतिम मुद्रण चरण में कुछ अनावश्यक 0अंक यहां एकत्र होंगे।

[y] [x] ...

अनुभाग जी

धारा जी कार्यक्रम के अंत में बड़ी संख्या को विभाजित करने का काम करता है, पहले कम से कम महत्वपूर्ण अंक, और अपने ASCII कोड के साथ ब्लॉक भेजने के लिए अन्य वर्गों के लिए छोड़ दिया।

चूँकि इसकी कोई रुकने की जाँच नहीं है, यह वास्तव में 0अंकों का उत्पादन जारी रखेगा , जब तक कि संख्या 0 से कम नहीं हो जाती है, जब तक कि अनुभाग डी Hफ़ंक्शन के साथ पूरे कार्यक्रम को रोक नहीं देता है।

[BkG] बड़े शुरुआती कोड ब्लॉक की एक प्रति संक्षिप्त करता है, जिसका उपयोग नए पुनरावृत्तियों को शुरू करने के लिए स्व-प्रतिकृति के लिए किया जाता है।

पहले चक्रों में प्रारंभिक:

) :~  : [)[):~[)~:~~([:~)*[):~[$1(+48]):~+]-:~~)10)~~]/]+:5):]~:]  ( 106328966328112328136317639696111819119696281563139628116326221310190661962811611211962861109696289611619628116111612896281115421063633063961111116163963011632811111819159628151213262722151522061361613096119619190661966311961128966130281807072220060611612811961019070723232022060611
)  ~ ~ [)[):~[)~:~~([:~)*[):~[$1(+48]):~+]-:~~)10)~~]/]+:5):]~:]  [BkG] [10...11]
) [)[):~[)~:~~([:~)*[):~[$1(+48]):~+]-:~~)10)~~]/]+:5):]~:]     ~ [BkG] [10...11]
) [):~[)~:~~([:~)*[):~[$1(+48]):~+]-:~~)10)~~]/]+:5):]       ~ : [10...11]  [BkG]

विशिष्ट पुनरावृत्ति, Nविभाजित करने के लिए संख्या को दर्शाता है:

) [):~[)~:~~([:~)*[):~[$1(+48]):~+]-:~~)10)~~]/]+:5):]        ~ : [N]  [BkG]
) :~ [)~:~~([:~)*[):~[$1(+48]):~+]-:~~)10)~~]/]+ :5 )         : [N]  : [BkG]
)  ~ ~ [)~:~~([:~)*[):~[$1(+48]):~+]-:~~)10)~~]/]  +5 5     ) [N]  [N] [BkG] [BkG]
) [)~:~~([:~)*[):~[$1(+48]):~+]-:~~)10)~~]/]               ~ 10 N  [N] [BkG] [BkG]
) ~:~  ~ ( [:~)*[):~[$1(+48]):~+]-:~~)10)~~]               / N 10  [N] [BkG] [BkG]
)  ~ : [:~)*[):~[$1(+48]):~+]-:~~)10)~~]                 ( {N/10}  [N] [BkG] [BkG]
) [:~)*[):~[$1(+48]):~+]-:~~)10)~~]                    : [{N/10}]  [N] [BkG] [BkG]
:~ )*[):~[$1(+48]):~+]- :~ ~)10 )           ~ ~ [{N/10}]  [{N/10}] [N] [BkG] [BkG]
~~) *[):~[$1(+48]):~+]- ~~10 )             ) [{N/10}]  ~ [{N/10}] [N]  [BkG] [BkG]
)  ~ * [):~[$1(+48]):~+]  -10            ~ ) {N/10}  [N] [{N/10}] [BkG] [BkG]
) [):~[$1(+48]):~+]               * {-10} {N/10}  ) [N]  [{N/10}] [BkG] [BkG]
) :~ [$1(+48]) :~                 + {-10*(N/10)} N  [{N/10}] [BkG] [BkG]
)  ~ ~ [$1(+48]  )                 ~ ~ {N%10}  [{N/10}] [BkG] [BkG]
) [$1(+48]                 ~ ) {N%10}  ~ [{N/10}] [BkG]  [BkG]
$1(                     + 48 {N%10}    ) [BkG]  [{N/10}] [BkG]
                        ( {48+N%10}   BkG [{N/10}] [BkG]            New iteration starts
                        [{48+N%10}]   ....
  • यहाँ देरी बूँद विशेष रूप से बालों वाली है। हालांकि, दो चक्रों में देरी के +:5बजाय केवल नई देरी की चाल का उपयोग करना है। कार्यक्रम में एस के केवल एक सहयोगी ने इसके लिए मदद की थी।--101010
  • [N]और [BkG]ब्लॉक दोहराया गया है, की तो एक प्रतिलिपि Nसे विभाजित है 10
  • [{N/10}]को डुप्लिकेट किया जाता है, फिर अधिक अंकगणितीय फ़ंक्शन का उपयोग ASCII कोड के अंतिम अंक की गणना करने के लिए किया Nजाता है 48+((-10)*(N/10)+N)। इस ASCII कोड वाला खंड F के लिए छोड़ दिया गया है।
  • नई पुनरावृत्ति की शुरुआत करने के [{N/10}]लिए [BkG]ब्लॉकों के बीच स्वैप की दूसरी प्रति प्राप्त होती है ।

बोनस क्वीन (540 बाइट्स)

)$$3371%%1[~!~~!)!]):[)$$20%%0[):]~)~~[)$$12%%0[<$$7%~~0):~[+----48+*-~~10))]<]<~!:~)~~[40~[:~))~:~[)~(~~/[+--48):]~10]+30])):]]][)[H]](11(06(06(21(21(25(19(07(07(19(61(96(03(96(96(03(11(03(63(11(28(61(11(06(06(20(18(07(07(18(61(11(28(63(96(11(96(96(61(11(06(06(19(20(07(07(18(61(30(06(06(25(07(96(96(18(11(28(96(61(13(15(15(15(15(22(26(13(12(15(96(96(19(18(11(11(63(30(63(30(96(03(28(96(11(96(96(61(22(18(96(61(28(96(11(11(96(28(96(61(11(96(10(96(96(17(61(13(15(15(22(26(11(28(63(96(19(18(63(13(21(18(63(11(11(28(63(63(63(61(11(61(42(63(63

इसे ऑनलाइन आज़माएं!

चूँकि मुझे यकीन नहीं था कि कौन सा तरीका सबसे छोटा होगा, इसलिए मैंने पहली बार वर्णों को कूटने की कोशिश की क्योंकि दो-अंको की संख्या (s से अलग हो गई । कोर कोड थोड़ा छोटा है, लेकिन 50% बड़ा डेटा प्रतिनिधित्व इसके लिए बनाता है। नहीं के रूप में एक दूसरे के रूप में गोल्फ, मैं बंद कर दिया जब मुझे एहसास हुआ कि यह इसे हरा नहीं होगा। इसका एक फ़ायदा है: इसे bignum समर्थन के साथ कार्यान्वयन की आवश्यकता नहीं है।

इसकी समग्र संरचना मुख्य एक के समान है। सेक्शन G सीधे F में डेटा प्रतिनिधित्व भरने के बाद से धारा G गायब है। हालाँकि, खंड E को दो-अंकीय संख्याओं के अंकों को फिर से बनाने के लिए एक समान दिव्य गणना करनी चाहिए।


1
आपको स्पष्टीकरण XD
VFDan

1
)$n[)]( देरी काउंटर के लिए एक बाइट कम है।
jimmy23013

15

जेली, 3 बाइट्स

”ṘṘ

इसे ऑनलाइन आज़माएं!

सत्यापन

$ echo $LANG
en_US
$ xxd -g 1 quine.jelly
0000000: ff cc cc                                         ...
$ ./jelly f quine.jelly | xxd -g 1
0000000: ff cc cc                                         ...

यह काम किस प्रकार करता है

”ṘṘ    Main link. No input.

”Ṙ     Set the return value to the character 'Ṙ'.
  Ṙ    Print a string representation of the return value.
       This prints: ”Ṙ
       (implicit) Print the return value.
       This prints: Ṙ

दुभाषिया किस संस्करण का उपयोग करता है? जब मैं इसका परीक्षण करता हूं, तो यह यूटीएफ -8 में आउटपुट होता है, भले ही इनपुट जेली के कोडपेज में हो (और एन्कोडिंग में बदलाव इसे क्वीन नहीं बना देगा)।

1
आउटपुट की एन्कोडिंग आपके टर्मिनल की सेटिंग्स पर निर्भर करती है: यदि यह UTF-x पर सेट है, तो यह इसका उपयोग करता है; अगर यह किसी और चीज़ के लिए सेट है, तो यह जेली के कोड पृष्ठ का उपयोग करता है। लिनक्स पर, LANG=en_USबस इतना ही हासिल होता है। tio.run/nexus/bash#@@/...
डेनिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.