वृद्धी क्वीन


23

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

उदाहरण के लिए, यदि आपका प्रोग्राम फ़ाइल fooमें भाषा barमें था baz.bar, तो आपको इसके समान आउटपुट प्राप्त करना चाहिए:

λ bar baz.bar
f
λ bar baz.bar
o
λ bar baz.bar
o

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

यह एक कोड-गोल्फ है, इसलिए बाइट्स में सबसे छोटा कार्यक्रम जीत जाता है।


1
यदि हम फ़ाइल के लिए स्रोत कोड को संशोधित कर सकते हैं, तो क्या इसका मतलब है कि हम इसे भी पढ़ सकते हैं?
FlipTack

1
@ Flp.Tkc अच्छा सवाल। ईमानदारी से कहूं तो मुझे कुछ पता नहीं है। मैं नहीं चाहता कि आप स्रोत को पढ़कर क्वीन का निर्माण करें, लेकिन यदि आप केवल फ़ाइल के संशोधन के लिए स्रोत पढ़ते हैं तो मैं ठीक हूं।
कॉनर ओ'ब्रायन

जवाबों:


6

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

“;⁾vṾ®ȯ©Ḣ”vṾ

यह एक निलादिक कड़ी है। इसे ऑनलाइन आज़माएं! (लिंक को बारह बार कॉल करने के लिए कोड शामिल है।)

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

“;⁾vṾ®ȯ©Ḣ”vṾ  Niladic link.

“;⁾vṾ®ȯ©Ḣ”    Set the left argument and the return value to s =: ';⁾vṾ®ȯ©Ḣ'.
           Ṿ  Uneval; yield r =: '“;⁾vṾ®ȯ©Ḣ”', a string representation of s.
          v   Eval; execute s as a Jelly program with argument r.

 ⁾vV          Yield 'vṾ'.
;             Concatenate r and 'vṾ', yielding q =: '“;⁾vṾ®ȯ©Ḣ”vṾ'.
    ®ȯ        Take the flat logical OR of the register (initially 0) and q.
              This replaces 0 with q in the first run, but it will yield the
              content of the register in subsequent runs.
      ©       Copy the result to the register.
       Ḣ      Head; pop and yield the first character of the register.
              This modifies the string in the register, so it holds one fewer
              character after each call.

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


मैं जेली नहीं जानता, इसलिए पाद ठीक क्या करता है? क्यों ^ 17?
कॉनर ओ'ब्रायन

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

12

जावास्क्रिप्ट - 26 बाइट्स

परिभाषित करता है f()कि स्रोत कोड वर्ण को वर्ण द्वारा लौटाता है।

n=0;f=x=>("n=0;f="+f)[n++]

वर्णों से बाहर आने के बाद अपरिभाषित हो जाता है।

n=0;f=x=>("n=0;f="+f)[n++]
for(i=0;i<30;i++){console.log(f())} //test harness


अगर मैं गलत नहीं हूं, तो आपको फ़ंक्शन कॉल को कोड के हिस्से के रूप में शामिल करना होगा।
मामा फन रोल

@MamaFunRoll प्रासंगिक मेटा पोस्ट के लिए लिंक?
डाउनगेट

मुझे कोई नहीं जानता: पी हालांकि, मैंने हमेशा सोचा है कि फ़ंक्शन कॉल खुद क्वीन का हिस्सा था; शायद मुझे याद आ रही है?
मामा फन रोल

@MamaFunRoll कल्पना विशेष रूप से फ़ंक्शन की अनुमति देती है, इसलिए कॉल की आवश्यकता नहीं होनी चाहिए। यह वैसे भी इस particylar चुनौती के लिए बहुत मतलब नहीं होगा।
डेनिस

ठीक है, बस सुनिश्चित कर रहा हूँ।
मामा फन रोल

2

स्टैक्ड , नॉन-कंपेटिंग, 34 बाइट्स

[tostr ':!' + execCounter # out]:!

मानक क्वीन पर एक बदलाव। यह एक पूर्ण कार्यक्रम है। यह execCounterइस कार्यक्रम को विशेष रूप से चलाने के लिए कितनी बार प्राप्त करने के लिए उपयोग करता है। सब कुछ आउटपुट करने के बाद त्रुटियां।

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


2

पिप , 31 बाइट्स

{Y"{Y (yRsRPy++v)}"(yRsRPy++v)}

एक अनाम फ़ंक्शन। यह TIO पर परीक्षण!

व्याख्या

इस मानक पिप के साथ शुरू करें:

Y"Y yRsRPy"yRsRPy
Y"Y yRsRPy"        Yank that string into y
           yRsRPy  In y, replace the space with repr(y)

इसे फंक्शन बनाने के लिए कर्ली ब्रेसेस में लपेटें। अब, पूरे स्रोत को वापस करने के बजाय, हमें इसमें अनुक्रमण करने की आवश्यकता है। सूचकांक के लिए एक वैश्विक चर का उपयोग करना और इसे हर बार बढ़ाना "अगले वर्ण को हर बार जब यह कहा जाता है" आवश्यकता को पूरा करेगा। vयह सबसे अच्छा उम्मीदवार है क्योंकि यह प्रीइंस्टीट्यूशनल है -1। इसे पहली बार बढ़ाने पर 0अगली बार 1, इत्यादि का सूचकांक मिलता है ।

पिप में चक्रीय अनुक्रमण होता है, इसलिए एक बार जब फ़ंक्शन अपने अंतिम चरित्र को प्रिंट करता है, तो यह शुरुआत में शुरू हो जाएगा।


1

पायथन, 90 बाइट्स

मानक पायथन क्वीन पर एक विस्तार (गोल्फ टिप्स का स्वागत):

def f(n=0,s='def f(n=0,s=%r):\n while 1:yield(s%%s)[n];n+=1'):
 while 1:yield(s%s)[n];n+=1

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

परीक्षण के लिए, बस कार्यक्रम के अंत में इस स्क्रिप्ट को संलग्न करें:

source = ''
try:
    # Call generator, add characters to the string
    for char in f():
        source += char
except IndexError:
    # Generator has reached end of source code
    pass

print(source)

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


1

* * <> , 13 21 बाइट्स

" r:2+a1Fi1+:1F1+[ro;

\nइंडेक्स का ट्रैक रखने के लिए एक फाइल बनाई गई है ।

यह अधिक गोल्फ होने में सक्षम हो सकता है, लेकिन कुछ भी तुरंत मुझ पर कूदता है ...

उत्पादन

$ starfish incrementalquine.sf 
"$ starfish incrementalquine.sf 
 $ starfish incrementalquine.sf 
r$ starfish incrementalquine.sf 
:$ starfish incrementalquine.sf 
2$ starfish incrementalquine.sf 
+$ starfish incrementalquine.sf 
a$ starfish incrementalquine.sf 
1$ starfish incrementalquine.sf 
F$ starfish incrementalquine.sf 
i$ starfish incrementalquine.sf 
1$ starfish incrementalquine.sf 
+$ starfish incrementalquine.sf 
:$ starfish incrementalquine.sf 
1$ starfish incrementalquine.sf 
F$ starfish incrementalquine.sf 
1$ starfish incrementalquine.sf 
+$ starfish incrementalquine.sf 
[$ starfish incrementalquine.sf 
r$ starfish incrementalquine.sf 
o$ starfish incrementalquine.sf 
;$ starfish incrementalquine.sf

व्याख्या

" r:2+                 build the quine
      a1F              open file named "\n"
         i1+:          read input, increment by 1, duplicate
             1F        save incremented input to file
               1+[     increment input, copy that many values to a new stack
                  ro   output the character at the beginning of the new stack
                    ;  end

धोखा इंक्रीमेंटल क्वीन

a1Fi1+:0go1F;

व्याख्या

a1F            open file named "\n"
   i1+         read input and add 1 to it
      :0g      push the value at (input,0) to the stack
         o     output the value
          1F   save the incremented input to the file
            ;  exit

हाहा, मुझे नहीं पता था कि आप एक फ़ाइल का नाम "\ n" रख सकते हैं। हालांकि यह तकनीकी रूप से gनिर्देश द्वारा स्रोत कोड पढ़ता है ।
कॉनर ओ'ब्रायन

@ ConorO'Brien, आह निष्पक्ष पर्याप्त। हम्म ...
redstarcoder

क्या *> <> स्टैक इंडेक्सिंग के कुछ प्रकार हैं? या आज्ञा दोहराव? फिर, आप मानक क्वीन ढांचे का उपयोग कर सकते हैं "your code goes here;> <> के लिए, फिर स्टैक पर nth सदस्य तक पहुंचें
Conor O'Brien

@ ConorO'Brien हाँ हाँ चैती पेलिकन ने मुझे मेरे दूसरे चीटिंग क्विन उत्तर :) पर यह क्वीन संस्करण दिखाया।
redstarcoder

1
@redstarcoder मैं quines (YAY!) पर अधिक काम कर रहा हूं और मैंने एक अच्छी तरकीब निकाली है, यदि आप r को # के लिए प्रतिस्थापित करते हैं: 1- # #; #; या [+ 1F1: + 1iF1a-1: "मैं इस समय परीक्षण नहीं कर सकता, लेकिन मेरा मानना ​​है कि यह आपके कोड से 1 बाइट काटता है।> <> quines #o <-1:" आदि: D
चैले पेलिकन

1

गणितज्ञ, 91 बाइट्स

टिप्पणियों का बहुत स्वागत है; मैं अभी भी रस्सियों के बारे में सीख रहा हूं कि किन खानों में उचित खदानें हैं।

(If[!NumberQ[q], q = 0]; StringTake[ToString[#0]<>FromCharacterCode[{91, 93}], {++q}]) & []

एक फ़ंक्शन को परिभाषित करता है जिसे बार-बार कोई तर्क नहीं कहा जाता है। 91 वें कॉल के बाद, यह एक बड़ी त्रुटि फेंकता है और बिना शर्त लौटाता है।

इसे दूर करने के लिए दो मुद्दे थे: पहला, मैं सिर्फ उपयोग करना चाहता था StringTake[ToString[#0]<>"[]"], लेकिन ToString[]उद्धरण चिह्नों को मिटाना चाहता था ; तो मैं बदलने के लिए था "[]"द्वारा FromCharacterCode[{91, 93}]। दूसरा, गणितज्ञ चर एकतरफा शुरू होते हैं, इसलिए मैं परिभाषित ++qहोने qसे पहले फोन नहीं कर सकता ; यही कारण है कि प्रारंभिक If[!NumberQ[q], q = 0]की जरूरत है।

अप्रासंगिक कोडा: ऊपर देखते हुए NumberQ, मुझे पता चला कि गणितज्ञ के पास एक फ़ंक्शन है TrueQ... जो, हाँ, रिटर्न Trueअगर तर्क है Trueऔर Falseयदि तर्क है False! (उपयोगिता यह है कि यह Falseअन्य सभी तर्कों पर भी लौटती है ।)


1

माइक्रोसेप्टिक II, 40 33 बाइट्स

एक कोड ब्लॉक शाब्दिक, एक फ़ंक्शन के लिए भाषा का निकटतम समकक्ष:

{ss1K+>K>s#<v{o}sl*v!(123v)lKp<o}

दौड़ने के बाद, यह xफिर से आह्वान करना आसान बनाता है।


0

बैश (और zsh, ksh), 39-बाइट्स

a=`<$0`;pwd>>0;echo ${a:`wc -l<0`-1:1}

यह कार्यक्रम प्रिंट होने के बाद कुछ भी प्रिंट नहीं करता है।

सुनिश्चित करें 0कि वर्तमान निर्देशिका में मौजूद नहीं है और चलाएं:

bash iquine.bash

PPCG में आपका स्वागत है! आपको सूचकांक बढ़ाने के लिए एक चतुर विचार मिला है। दुर्भाग्य से, यह ऐसा लगता है कि यह उत्तर अपने स्वयं के स्रोत कोड को पढ़कर काम करता है, जिसका अर्थ है कि यह हमारे मानकों द्वारा मान्य नहीं है । यदि आप अपने स्वयं के स्रोत को पढ़ने के अलावा अन्य क्वीन तकनीकों का उपयोग करने के लिए इसे संशोधित करते हैं, तो यह एक अच्छा जवाब होगा।
DLosc
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.