बढ़ते आकार में कार्यक्रम उत्पन्न करें


21

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

उदाहरण

अगर मेरा कार्यक्रम है a:

< a
> aa

< aa
> aaaa

< aaaa
> aaaaaaaa

नियम

  • कोई क्वीन बिल्ट-इन नहीं
  • मूल कार्यक्रम कम से कम एक बाइट होना चाहिए
  • अनुक्रम को सैद्धांतिक रूप से असीम रूप से काम करना चाहिए
  • आपके प्रोग्राम को कुछ भी पढ़ने की अनुमति नहीं है (फ़ाइल, stdio)

आपका स्कोर मूल कार्यक्रम का आकार है।


कैसे फ़ाइल को पढ़ने के बारे में खुद को पढ़कर / उस स्थान तक पहुंच के बारे में जहां कोड निहित है?
कॉनर ओ'ब्रायन

@ C @O'Bʀɪᴇɴ की अनुमति नहीं है क्योंकि मुझे लगता है कि नियमों का उल्लंघन होगा।
डाउनगोट

2
@ दोनो नियम विकी टैग विकी द्वारा सुझाए गए हैं लेकिन स्वचालित रूप से लागू नहीं होते हैं
मार्टिन एंडर


जवाबों:


12

सीजेएम, 10 बाइट्स

{"_~"+_}_~

इसका परीक्षण यहां करें।

व्याख्या

{"_~" e# Generalised quine framework, leaves the block and the string "_~"
      e# on the stack. 
+     e# Prepend the block to the string.
_     e# Duplicate the resulting array.
}_~

GolfScript मर नहीं है! इल्मरी के पास एक ऐसे ही सवाल का जवाब है जो यह ठीक 10 बाइट्स में करता है।
जस्टिन

8

जावास्क्रिप्ट, 62 61 37 बाइट्स


मदद के लिए @ Doᴡɴɢᴏᴀᴛ को धन्यवाद!


मूल [37 बाइट्स]:

f=_=>'f='+'_'.repeat((10+f).length)+f

बच्चा [74 बाइट्स]:

f=______________________________________=>'f='+'_'.repeat((10+f).length)+f

पोते [148 बाइट्स]:

f=________________________________________________________________________________________________________________=>'f='+'_'.repeat((10+f).length)+f


वैकल्पिक (मुद्रण के लिए कंसोल के साथ, और एक पूर्ण कार्यक्रम के रूप में):

मूल [61 बाइट्स]:

f=_=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()

बच्चा [122 बाइट्स]:

f=______________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()

पोते [244 बाइट्स]:

f=________________________________________________________________________________________________________________________________________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()



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

1.   f=_=>   फ़ंक्शन को परिभाषित करें f के रूप मेंconsole.log(...)

2.   ;f()   रन फंक्शन च।

3.   (फंक्शन में)  

  • console.log(...)   निम्नलिखित प्रिंट करें:

    • f=   शाब्दिक पाठ "f ="
    • ${'_'.repeat((0+f).length+5)   "_" को f की लंबाई के लिए दोहराया जाता है, वर्णों के खाते में फेरबदल के लिए शामिल नहीं किया जाता है
    • +f}   फ़ंक्शन की कठोरता एफ
    • ;f()   शाब्दिक पाठ "; च ()"

टिप्पणियाँ

  • console.logइसके बजाय आवश्यक है alertक्योंकि alertवास्तव में लंबे तार (मेरी मशीन / ब्राउज़र कॉन्फ़िगरेशन पर कम से कम) के साथ अच्छा नहीं लगता है
  • _के समारोह च की (अप्रयुक्त) पैरामीटर का नाम में डाला जाता है, सुनिश्चित करें कि वे च की stringification में शामिल हैं।
  • console.logदूसरे पर पहले समाधान के मुख्य सुधार (एक तरफ से छुटकारा पाने से ): 10समारोह में जोड़ने के बजाय 0इसे स्ट्रिंग में डालने के लिए यह एक बाइट को लंबा बनाता है, 1 बाइट को जोड़ने के बाद की आवश्यकता को समाप्त करता है।

0+fसमारोह को एक स्ट्रिंग में
उतारने के

48 बाइट्स:(f=_=>`(f=${'_'.repeat((0+f).length+5)+f})()`)()
डाउनगेट

@ Do @ यह भूल गए कि परिणाम लौटाना आमतौर पर स्वीकार्य है। अपडेट करूंगी।
जिन्न

@ Do @ दरअसल, चूंकि कार्यों के रूप में उत्तर लिखना आम तौर पर स्वीकार किया जाता है, क्या समाधान को फ़ंक्शन को कॉल करना होगा?
जिन्न

यकीन है, तुम कर सकते हो
Downgoat

6

मिंकोलंग 0.15 , 19 14 बाइट्स

"66*2-rIDdr$O.

मूल , बच्चा , पोता

व्याख्या

"66*2-      $O.    Standard quine formulation

      r            Reverse stack
       I           Push length of stack
        D          Pop n and duplicate top of stack n times
         d         Duplicate top of stack
          r        Reverse stack

rएस के बीच में जो कुछ होता है वह दोहरीकरण की कसौटी पर खरा उतरने के लिए पर्याप्त अवधि की समाप्ति की नकल करता है। ."स्टॉप प्रोग्राम" चरित्र है, इसलिए अंत में कई अवधियां वहां होने के अलावा कुछ नहीं करती हैं।



2

पायथन 3, 51 बाइट्स

x=r"print('x=r\"'+x+'\"'+';exec(x*2)');";exec(x*2)

इसमें एक अनुगामी न्यूलाइन शामिल है।

कौन से आउटपुट:

x=r"print('x=r\"'+x+'\"'+';exec(x*2)');";exec(x*2)
x=r"print('x=r\"'+x+'\"'+';exec(x*2)');";exec(x*2)

2

GolfScript, 11 बाइट्स

{: ".~"]}.~

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

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

{: ".~"]}.~

{       }    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 the entire stack in an array.

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

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

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

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

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

और इसी तरह।

आगे क्या होगा

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

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

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

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

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

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

      {: ".~"]}.~
      

      STDOUT और स्टैक कॉपी को स्टैक के शीर्ष से पॉप करता है।

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

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

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

    3. n एकल लाइनफ़ीड से युक्त स्ट्रिंग को धकेलता है।

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

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

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

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

      {: ".~"]}.~
      

      एसटीडी के बारे में।


1

S, 26 चार्ट / 36 बाइट्स

⟮ô`\u27ee⦃ᶈ0}\u27ef
`ď2)⟯

Try it here (Firefox only).

ध्यान दें कि एक अनुगामी न्यूलाइन है।

व्याख्या

मानक क्वीन: ⟮ⒸⅩ222+ᶈ0

संशोधन:

  • ôअंतिम परिणाम के बजाय सभी परिणामों को प्राप्त करने के लिए फ़ंक्शन का उपयोग करें (जैसा कि अंतर्निहित आउटपुट का उपयोग करके किया जाता है)
  • \u27ee⦃ᶈ0}\u27ef\nबाद के कॉपी ब्लॉक्स के साथ टकराव को रोकने के लिए कॉपी ब्लॉक का उपयोग करें और बंद करें ।
  • ď2दो बार स्ट्रिंग को दोहराने के लिए उपयोग करें ।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.