1-अपनी औसत क्वीन


34

एक 1-अप Quine एक प्रोग्राम है जो बहुत एक Quine के समान है। एक बड़ा अंतर यह है कि एक बार मुद्रण के बजाय, जब कार्यक्रम की एन प्रतियां समेटी जाती हैं, तो परिणाम मूल कार्यक्रम को n + 1 बार प्रिंट करता है ।

उदाहरण

यदि आपका कार्यक्रम है Abc123:

Abc123  ->  Abc123Abc123
Abc123Abc123  ->  Abc123Abc123Abc123
Abc123Abc123Abc123  -> Abc123Abc123Abc123Abc123

चुनौती

आपकी चुनौती किसी भी भाषा में सबसे कम वैध 1-अप क्वीन बनाने की है। सामान्य नियम नियम लागू होते हैं, इसलिए आप नहीं कर सकते हैं:

  • खाली कार्यक्रम प्रस्तुत करें।
  • प्रत्यक्ष या अप्रत्यक्ष रूप से 1 स्रोत कोड पढ़ें ।
  • बिल्ट-इन का उपयोग करें।

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

1 इसमें आपके प्रोग्राम के भाग के रूप में हार्ड-कोडेड स्ट्रिंग या कोड ब्लॉक का उपयोग करना शामिल नहीं है।


2
क्या यह ठीक है अगर nकुछ डेटा प्रकार प्रतिबंध (अधिकतम पूर्णांक आकार आदि) द्वारा सीमित है?
लुइस मेंडो

2
@LuisMendo मुझे लगता है कि यह ठीक है, जब तक आप एक उचित संख्या में दोहराव (100, हो सकता है) का समर्थन कर सकते हैं।
ETHproductions

क्या स्रोत कोड की लंबाई एक बिलिन क्विनिंग विधि का उपयोग करके ठीक है?
कॉनर ओ'ब्रायन

2
@ C @O'Bʀɪᴇɴ जो स्रोत कोड को स्वयं प्राप्त करने के लिए थोड़ा बहुत समान है, क्योंकि आप अभी भी स्रोत कोड के बारे में जानकारी प्राप्त कर रहे हैं। तो नहीं।
ETHproductions

जवाबों:


13

GolfScript, 12 बाइट्स

{`'.~'+:n}.~

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

व्याख्या

यह मानक गोल्फस्क्रिप्ट क्वीन से विचारों को जोड़ता है:

{'.~'}.~

और मेरा हाल ही में खोजा गया क्वीन :

":n`":n`

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

{        # Standard quine framework. This pushes the block, duplicates it and runs the
         # second copy, such that it can process the first copy to create a quine.
  `      # Convert the block to its string representation.
  '.~'+  # Append the string '.~' to make a complete quine. This is simply left on the
         # stack to be printed at the end.
  :n     # Store the string in n such that one more copy is printed at the end.
}.~

12

GolfScript, 12 बाइट्स

{: ".~"][}.~

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

सोर्स कोड कैसे काम करता है

{: ".~"][}.~

{        }    Define and push a code block.
          .~  Push a copy and execute it.
 :            Save the code block in the space character.
              Every subsequent space will now execute the code block.
   ".~"       Push that string.
       ]      Wrap everything up to the last [ in an array.
        [     Set a new array marker.

यदि उपरोक्त स्रोत कोड को एक बार निष्पादित किया जाता है, तो स्टैक समाप्त हो जाएगा

["" {: ".~"]} ".~"]

जहां शुरुआत में खाली स्ट्रिंग स्टैक की प्रारंभिक स्थिति (खाली इनपुट) से मेल खाती है।

स्रोत कोड की दो प्रतियां अंतिम स्थिति छोड़ देंगी

["" {: ".~"]} ".~"] [{: ".~"]} ".~"]

तीन प्रतियां एक अंतिम स्थिति की

["" {: ".~"]} ".~"] [{: ".~"]} ".~"] [{: ".~"]} ".~"]

और इसी तरह।

आगे क्या होगा

स्रोत कोड निष्पादित करने के बाद, दुभाषिया निम्न कार्य करता है।

  1. यह एक सरणी में पूरे स्टैक को लपेटता है, और स्टैक पर उस सरणी को धक्का देता है।

    स्रोत कोड की दो प्रतियों के लिए, स्टैक में अब शामिल है

    ["" {: ".~"][} ".~"] [{: ".~"][} ".~"] [["" {: ".~"][} ".~"] [{: ".~"][} ".~"]]
    
  2. यह putsलिपटे स्टैक को प्रिंट करने के इरादे से निष्पादित किया गया, इसके बाद एक लाइनफीड।

    putsके रूप में परिभाषित किया गया है {print n print}, इसलिए यह निम्नलिखित करता है।

    1. printस्टैक की लिपटी हुई प्रतिलिपि को बिना निरीक्षण किए (यानी, अपने स्ट्रिंग प्रतिनिधित्व में परिवर्तित किए बिना) प्रिंट करता है। यह भेजता है

      {: ".~"][}.~{: ".~"][}.~
      

      (स्रोत कोड) STDOUT में और स्टैक कॉपी को स्टैक के शीर्ष से पॉप करता है।

      ढेर अब शामिल है

      ["" {: ".~"][} ".~"] [{: ".~"][} ".~"]
      
    2. उस कोड ब्लॉक को निष्पादित करता है जिसे हमने पहले परिभाषित किया था।

      :[{: ".~"][} ".~"]अंतरिक्ष चरित्र में सहेजने से शुरू होता है , फिर ".~"खुद को धक्का देता है, एक सरणी में ]लपेटता है ".~", और [एक नया सरणी मार्कर सेट करता है।

    3. n एकल लाइनफीड से मिलकर एक तार को धकेलता है।

      ढेर अब शामिल है

      ["" {: ".~"][} ".~"] [{: ".~"][} ".~"] [".~"] "\n"
      
    4. एक बार फिर निष्पादित किया जाता है। हालाँकि, इसे नए सिरे से परिभाषित किया गया था जब हमने इसे पहली बार कहा था और अब इसमें एक कोड ब्लॉक नहीं बल्कि एक सरणी है।

      वास्तव में, यह धक्का देता है [{: ".~"][} ".~"], स्टैक को छोड़ देता है

      ["" {: ".~"][} ".~"] [{: ".~"][} ".~"] [".~"] "\n" [{: ".~"][} ".~"]
      
    5. अंत में, printसबसे ऊपरी स्टैक आइटम को बिना निरीक्षण किए , प्रिंट करता है

      {: ".~"][}.~
      

      STDOUT, 1-सोर्स सोर्स को यूप करना।


11

जावास्क्रिप्ट ईएस 6 (आरईपीएल), 55 बाइट्स

var a=-~a;$=_=>`var a=-~a;$=${$};$();`.repeat(a+1);$();

सहेजे गए 2 बाइट @ user81655 की बदौलत!

व्याख्या

यहाँ मानक quine ढांचा है:

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

आपको इस रूपरेखा को प्रस्तुत करने में सक्षम होना चाहिए। अधिक स्पष्टीकरण नीचे।


var a=-~a;

यह काउंटर है, जिसे डिफ़ॉल्ट रूप से 1. मूल रूप से, यह बताता है कि एक ही समय में क्वीन और वेतन वृद्धि को कितना दोहराना है।

$=_=>`var a=-~a;$=${$};$();`.repeat(a+1);$();

यह क्वीन पार्ट है। हम अनिवार्य रूप से काउंटर + 1 द्वारा क्विन स्ट्रिंग को दोहराते हैं। बाद में फ़ंक्शन कॉल आउटपुट को ओवरराइड करेगा।


यह सिर्फ मैं हो सकता है, लेकिन यह कुछ भी नहीं लगता है। (JSFiddle का उपयोग कर परीक्षण किया गया है, अगर यह मायने रखती है?)
jrich

आह, आपको फ़ायरफ़ॉक्स कंसोल का उपयोग करना चाहिए। (और रीसेट करने के लिए प्रत्येक रन के बाद पुनः लोड करें a)।
मामा फन रोल

मुझे नहीं लगता कि आपको जरूरत हैvar
Cyoce

नहीं, मैं करता हूं क्योंकि एक शुरू में अपरिभाषित है। Var का उपयोग करने से हम इसके साथ काम कर सकते हैं।
मामा फन रोल

7

CJam, 14 बाइट्स

{"_~"]-2>_o}_~

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

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

{"_~"]-2>_o}_~

{          }    Define a code block and push it on the stack.
            _~  Push and execute a copy of it.
 "_~"           Push that string.
     ]          Wrap the entire stack in an array.
      -2>       Discard all but the last two elements (block and string).
         _o     Push and print a copy of that array.

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


4

ग्रूवी, 83 बाइट्स

s="s=%c%s%c;f={printf(s,34,s,34,10)};f()%cf()//";f={printf(s,34,s,34,10)};f()
f()//

एक एम्बेडेड है और कोई अनुगामी न्यूलाइन नहीं है। यह प्रिंट:

s="s=%c%s%c;f={printf(s,34,s,34,10)};f()%cf()//";f={printf(s,34,s,34,10)};f()
f()//s="s=%c%s%c;f={printf(s,34,s,34,10)};f()%cf()//";f={printf(s,34,s,34,10)};f()
f()//

फ़ंक्शन f()क्वीन की एक प्रति प्रिंट करता है। प्रारंभिक कार्यक्रम इसे दो बार कहता है। संलग्न कोड की पहली पंक्ति एक टिप्पणी बन जाती है और केवल दूसरी कॉल f()निष्पादित होती है।


4

रूबी, 43 बाइट्स

1;s="1;s=%p;$><<s%%s*n=2-0";$><<s%s*n=2-0

अपने आप से, यह खुद 2-0या 2समय प्रिंट करता है। जब स्वयं की एक अन्य प्रति के लिए सहमति दी जाती है, तो अंतिम प्रिंट स्टेटमेंट जैसा दिखता है $><<s%s*n=2-01, जिसका अर्थ है कि यह केवल एक बार खुद को आउटपुट करता है ( 01ओक्टल 1)। तो केवल दो बार स्ट्रिंग प्रिंट की अंतिम प्रति, अन्य एक बार प्रिंट करते हैं।

इनलाइन असाइनमेंट nसिर्फ सही ढंग से काम करने वाले संचालन के क्रम को प्राप्त करने के लिए है; राज्य वास्तव में एक प्रति से दूसरे में पारित नहीं किया जा रहा है।


4

NodeJS, 63 61 60 55 बाइट्स

यह जावास्क्रिप्ट (ES6) में भी काम करेगा यदि आप कई कंसोल संदेशों को नईलाइनों से अलग करने पर विचार करते हैं (कोई REPL आवश्यक नहीं)

2 बाइट @ देव-नल के लिए धन्यवाद बचा

(f=_=>(t=_=>console.log(`(f=${f})()`)||(_=>t))(t()))()

ध्यान दें कि कोड के अंत में एक नई पंक्ति है।


यह एक दिलचस्प था, निश्चित रूप से अब तक इस साइट के लिए मेरा पसंदीदा।

मुझे पूरा विश्वास है कि इसे बहुत अधिक नहीं बढ़ाया जा सकता है। (शायद स्पाइडरमोंकी का printकार्य ...)

व्याख्या

//FIRST ITERATION
            console.log(`(f=${f})()`)                   //logs to the console a quine of the source code using function f's toString()
                                     ||                 //causes the expression to evaluate to the second part, since console.log's return value is falsy
                                       (_=>t)           //a function that returns function t when called
       t=_=>                                            //defines function t to be the code above. When called, t will log a quine and then return a function that returns t.
      (                                      )(t())     //call t twice. (one call is done via the t() as an ignored parameter) This will print the quine twice.
 f=_=>                                                  //define f as the above code.
(                                                  )()  //call function f with no arguments. this results in a function returning t. (the result of calling t once)
                                                        //this newline is to compensate for console.log's behavior of adding a newline to its output
//SECOND ITERATION
(                                                  )    //call the function that returns t that was returned from the first iteration. This expression will result in whatever that function returns, which is t.
 f=_=>(t=_=>console.log(`(f=${f})()`)||(_=>t))(t())     //this part evaluates to a function, which is passed as a parameter to the function that returns t, that ignores its parameter.
                                                    ()  //call whatever the last expression returned, which is the function t, with no parameters. This will print the quine once.
                                                        //this call will result in a function returning t, just like from the first iteration, so we can add on more iterations at will.

मैं प्यार करता हूँ कि यह कैसा लगता है जैसे यह पहले धूप का चश्मा लगा रहा है। (f=_=मैं थोड़ा बहुत थक सकता हूं।
बेन लेगिएरो

2

रूबी, 55 बाइट्स

n||=2;s="n||=2;s=%p;$><<(s%%s)*n;n=1;";$><<(s%s)*n;n=1;

यहां बहुत दिलचस्प कुछ भी नहीं है, यह एक काउंटर के साथ सिर्फ एक सामान्य रूबी क्वीन है।


2

जावास्क्रिप्ट (ईएस 6), 164 बाइट्स

console.log((`+String.fromCharCode(96)).repeat(window.a||(a=3,5)).slice(67,-14))
console.log((`+String.fromCharCode(96)).repeat(window.a||(a=3,5)).slice(67,-14))

जेएस परीक्षण पृष्ठ या कंसोल में फ़ायरफ़ॉक्स में काम करता है, यह मानते हुए कि दो कंसोल संदेशों के बीच का स्थान एक नई रेखा के रूप में गिना जाता है।


एक सामान्य प्रयोजन की भाषा में ऐसा करने के लिए कई सहारा!
बेन लेगिएरो

छोटा कर windowदिया this
मामा फन रोल



1

Y

नॉनकंपेटिंग, 6 बाइट्स

UCn*px

Y एक हेडकानन है जिसे मैंने कुछ समय के लिए लिया है, और इसने मुझे इसे लिखने के लिए प्रेरित किया। इसे उन चुनौतियों के लिए बनाया गया है जिनमें अनुक्रमण महत्वपूर्ण है, जैसे कि यह। कोड "नोड" वर्णों के लिंक में विभाजित है। इस स्थिति में, हमारे कोड को दो श्रृंखलाओं (मूल रूप से) में डाल दिया जाता है, नोड के साथ C

U  C  n* px
1  N    2

Uएक ट्रान्सेंडैंटल स्ट्रिंग को रिकॉर्ड करता है, अर्थात, जो लिंक को फैलाता है। यह तब तक रिकॉर्ड करता है जब तक यह दूसरे से मिलता नहीं है U। यदि कोई Uस्ट्रिंग के अंत तक पूरा नहीं होता है, तो यह चारों ओर लपेटता है। इसके अलावा, Uस्ट्रिंग में डिफ़ॉल्ट रूप से शामिल है। स्ट्रिंग रिकॉर्ड करने के बाद, हम नोड पर आगे बढ़ते हैं C, जो हमें अगले लिंक पर ले जाता है।

nजंजीरों की संख्या को बढ़ाता है। हमारे आधार मामले के लिए, यह 2. Kजंजीरों के एक अनुक्रम के लिए , K+2चेन हैं, क्योंकि Kनोड्स हैं। *स्ट्रिंग प्रत्यावर्तन है। pपूरे स्टैक को प्रिंट करता है (इस मामले में, एक स्ट्रिंग), और xप्रोग्राम को समाप्त करता है।

एक पाठ में:

UCn*px
U..... record that string
 C     next link
  n*   repeat that string twice.
    px print and terminate

UCn*pxUCn*pxUCn*px
U.....U            record string
 C                 next link
  n*               repeat that string four times (three Cs)
    px             print and terminate

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


तो Uक्वीनिंग के अलावा इसका व्यावहारिक उपयोग क्या होगा ? (7k पर बधाई, btw)
ETHproductions

@ETHproductions U का उपयोग एक स्ट्रिंग को पकड़ने के लिए किया जा सकता है, जो लिंक को फैलाता है, जो प्रोग्राम के लिंक लिंक को कैप्चर करने और खर्च करने में भी सक्षम है। और धन्यवाद! : डी
कॉनर ओ'ब्रायन

1

ब्रेकीलॉग , 20 बाइट्स

⊥∨"⊥∨~kgjw₃w₅"gjw₃w₅

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

इस क्वीन से संशोधित

⊥                       Fail,
 ∨                      or
                w       print
  "⊥∨~kgjw₃w₅"          "⊥∨~kgjw₃w₅"
                 ₃      formatted
              gj        with itself;
                 ₃w₅    print it again at the end of the program if this route succeeds.

जब यह स्वयं के साथ समाप्‍त हो जाता है, तो अंतिम विफलताओं को छोड़कर हर मार्ग और कार्यक्रम अगले एक पर चलता है, प्रत्येक को निष्पादित करता है w₃और w₅पिछले एक को छोड़कर हर अतीत को पीछे करता है।

⊥∨"⊥∨~kgjw₃w₅"gjw₃w₅⊥∨"⊥∨~kgjw₃w₅"gjw₃w₅

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

⊥∨"⊥∨~kgjw₃w₅"gjw₃w₅⊥∨"⊥∨~kgjw₃w₅"gjw₃w₅⊥∨"⊥∨~kgjw₃w₅"gjw₃w₅

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

⊥∨"⊥∨~kgjw₃w₅"gjw₃w₅⊥∨"⊥∨~kgjw₃w₅"gjw₃w₅⊥∨"⊥∨~kgjw₃w₅"gjw₃w₅⊥∨"⊥∨~kgjw₃w₅"gjw₃w₅

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

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