n- स्तर Ouroboros Quine


11

यह 128-भाषा क्वीन ओबोरबोस (एक प्रोग्राम जो किसी अन्य भाषा में एक प्रोग्राम आउटपुट करता है, जो एक प्रोग्राम को दूसरी भाषा में आउटपुट करता है, (125 भाषाएँ बाद में), जो मूल प्रोग्राम को आउटपुट करता है) बहुत प्रभावशाली है। लेकिन दुर्भाग्य से, इसमें पुनरावृत्तियों की एक स्थिर संख्या है।

एक प्रोग्राम लिखें जो एक प्रोग्राम को आउटपुट करता है (जरूरी नहीं कि दूसरी भाषा में हो, लेकिन यह हो सकता है), जो एक प्रोग्राम को आउटपुट करता है, जो एक प्रोग्राम को आउटपुट करता है, आदि, जो n पुनरावृत्तियों के बाद, पहली बार मूल प्रोग्राम को आउटपुट करता है (अर्थात कोई मध्यवर्ती नहीं) कार्यक्रम मूल के समान होना चाहिए, क्योंकि अन्यथा एक क्वीन जो इसके इनपुट को अनदेखा करता है) काम करेगा), जहां n एक गैर-नकारात्मक पूर्णांक है जो इनपुट के रूप में प्रदान किया गया है। मूल स्रोत कोड में इनपुट सिर्फ एक संख्या नहीं हो सकती है (उदाहरण x = <the value of n>के लिए आपके कार्यक्रम की शुरुआत में), यह निम्नलिखित में से एक होना चाहिए:

  1. कमांड-लाइन तर्क के रूप में पारित किया गया
  2. मानक इनपुट से पढ़ें
  3. एक फ़ंक्शन के तर्क के रूप में पारित किया गया, जो नए प्रोग्राम को लौटाता / आउटपुट करता है।

ऑरोबोरोस में मध्यवर्ती चरणों के लिए, आपका कार्यक्रम या तो पूरी तरह से कार्य करने वाला कार्यक्रम हो सकता है, या बिना किसी तर्क के एक कार्य हो सकता है, जिसे जब बुलाया जाता है, तो वह अगले एक को वापस करेगा / आउटपुट करेगा।

आप स्वयं स्रोत फ़ाइल से नहीं पढ़ सकते हैं, या किसी भी क्वीन जैसे बिलिन का उपयोग नहीं कर सकते हैं (मुझे नहीं लगता कि ऐसा कोई भी है जो ऐसा करेगा, लेकिन ऐसा हो सकता है)

स्पष्ट होने के लिए, यदि n = 0, कार्यक्रम को अपने स्वयं के स्रोत कोड का उत्पादन करना चाहिए।

यदि n = 1, प्रोग्राम को एक अलग प्रोग्राम आउटपुट करना चाहिए, जो मूल स्रोत कोड को आउटपुट करता है।

और इसी तरह...

सबसे शानदार बाइट्स जीतता है!

संपादित करें:

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



क्या हम 1 इंडेक्स n कर सकते हैं? तो n = 1 का मतलब होता है प्रिंट सोर्स कोड, n = 2 का मतलब होता है प्रिंट कोड, जो सोर्स कोड आदि को प्रिंट करेगा
एक्सपायर्ड डाटा

1
क्या पुनरावृति संस्करणों में अभी भी प्रारंभिक इनपुट होगा? तो मान लें कि मेरा पहला इनपुट 3 है, और मैं प्रोग्राम को आउटपुट करता हूं। क्या अब भी कोई इनपुट 3, या कोई इनपुट नहीं होगा? यदि कोई इनपुट नहीं है, तो मुझे लगता है कि हमें यह संभालने की आवश्यकता है कि यदि getInput()कोई इनपुट प्रदान किए बिना कुछ का उपयोग किया जाता है। या हम यह कह सकते हैं कि इनपुट को कुछ यादृच्छिक है जो बाद के पुनरावृत्तियों के लिए अप्रयुक्त है, के लिए त्रुटियों को रोकने के लिए getInput()? Aka वर्तमान पायथन जवाब मान्य है?
केविन क्रूज़सेन

मुझे संदेह है कि हम जो करने के लिए कहते हैं, एक पूर्णांक दिया जाता है n, एक प्रोग्राम को आउटपुट करता है जो nपुनरावृत्तियों के एक ofroboros quine का "प्रारंभिक कार्यक्रम" है , और यह कि हमारा उत्तर nपुनरावृत्तियों में से एक के रूप में नहीं गिना जाना चाहिए । क्या ये सही है?
निकोलस

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

जवाबों:


5

05AB1E , 28 बाइट्स

-4 बाइट्स + केविन क्रूज़सेन के लिए धन्यवाद

"34çìD«s<©di®ì"34çìD«s<©di®ì

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


व्याख्या

यह शेष संख्या को कोड के सामने प्रिंट करने के लिए जोड़कर काम करता है, जिसका अर्थ है कि यह स्टैक में उसी तरह जोड़ा जाता है जिस तरह से एक इनपुट होगा। "0" इनपुट के आधार मामले में, यह सामने की तरफ 0 को समाप्‍त नहीं करेगा।


d>=0सकारात्मक के बजाय गैर-नकारात्मक ( >0) है। समस्या यह है कि dइसे पॉपिंग के बिना जांचने के लिए , आपको पहले इसे डुप्लिकेट करने की आवश्यकता है, लेकिन फिर इसे पुनरावृत्ति पर छोड़ना होगा 0"quinsting", अन्यथा यह डुप्लिकेट को आउटपुट करेगा 0। :(
केविन क्रूज़सेन

"34çìD«s<©di®ì"34çìD«s<©di®ì28 बाइट्स के लिए शायद (जो अभी भी आपके इच्छित दृष्टिकोण के बहुत करीब है)? (मैं अपकमिंग से iteration 0"34çìD«s<Ddiì"34çìD«s<Ddiìआउटपुट के लिए अपने वर्तमान संस्करण से डरता हूँ ..)-1D
केविन क्रूज़सेन

4

रूनिक एनकाउंटर , 39 बाइट्स

"3X4+kSql1=c*?S:1-}C'LA-}!i:0)2*?~!'´@

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

होगा 4 बाइट कम आदानों जहां कम से कम या बराबर है, तो एक ही रणनीति का उपयोग कर 05AB1E से 10। लेकिन जैसा कि हमें मनमाने ढंग से बड़े मूल्यों का समर्थन करने की आवश्यकता है, यह अधिक जटिल हो जाता है।

संख्यात्मक मान nमोर्चे पर रखा जाता है और एक सतत संख्या शाब्दिक उपयोग के रूप में पार्स किया जाता है ´"3X4+kSqबुनियादी क्वीन कोड है। यदि सामने कोई मूल्य मौजूद नहीं है, तो स्टैक की लंबाई केवल 1 (क्विन) होगी अन्यथा 2 यह l1=d*?निर्धारित करते हैं कि वहां से चीजों को कैसे संभालना है।

  • यदि कोई मान है, तो S:1-}'LA2+-}चलता है: मान को शीर्ष पर स्वैप करें, 1 घटाएं, इसे डुप्लिकेट करें, स्टैक के निचले भाग पर एक कॉपी छोड़कर, उस मान के लॉग 10 को 100 प्राप्त करें (जिसके परिणामस्वरूप मूल्य की अपनी वर्ण लंबाई, प्लस) 1 के लिए ´), स्ट्रिंग के अंत से कई वर्णों को हटा दें (प्रभावी रूप से अंत में खुद को काट-छाँट करना, दोनों जहाँ इसकी आवश्यकता नहीं है और क्योंकि इसका गलत मूल्य है)। Cएक बाइट से कम है 2+और एक ही मूल्य में परिणाम है।

  • यदि कोई मान नहीं है, तो इनपुट से एक पढ़ें।

भले ही: :0)2*?डुप्लिकेट और शून्य के साथ तुलना करें।

  • यदि गैर-शून्य धक्का ´

  • यदि शून्य है, तो मान पॉप करें। हम बाइट के !बजाय का उपयोग करके धोखा दे सकते हैं 2?और जब ´पहली बाइट निष्पादित करने की कोशिश करता है तो यह गैर-संख्यात्मक है और तुरंत उसी स्थिति में नंबर मोड से बाहर चला जाता है।

पूरे स्टैक को ऊपर से नीचे तक प्रिंट करें।


3

जावा 10, 145 बाइट्स

n->{Long N=n;var s="n->{Long N=%s;var s=%c%s%2$c;return s.format(s,N>0?N-1+%2$cL%2$c:%2$cn%2$c,34,s);}";return s.format(s,N>0?N-1+"L":"n",34,s);}

इसे ऑनलाइन आज़माएं और कुछ पुनरावृत्तियों के आउटपुट देखें

स्पष्टीकरण:

स्पष्टीकरण:

  • var sअस्वरूपित स्रोत कोड शामिल
  • %s इस स्ट्रिंग को अपने साथ रखने के लिए उपयोग किया जाता है s.format(...)
  • %c, %1$cऔर 34डबल-कोट्स को फॉर्मेट करने के लिए उपयोग किया जाता है
  • s.format(s,34,s) यह सब एक साथ रखता है

चुनौती हिस्सा:

पहला लैंबडा फ़ंक्शन longपैरामीटर के रूप में एक इनपुट लेता है ।

  • यह Long N=n;पहली पुनरावृत्ति में चर में सेट किया गया है। या Long N=%s;अगले पुनरावृत्तियों के लिए।
  • टर्नरी चेक N>0?N-1+"L":"n"इसे %sमान के साथ भर देगा N-1, Lक्योंकि यह एक लंबा है और इसे स्ट्रींग में बदलने के लिए %s, यदि N1 से बड़ा है। यदि Nइसके बजाय 0 है (प्रारंभिक इनपुट था 0या यह इंटरक्यूइन का अंतिम पुनरावृत्ति है- ' लूप '), यह %sप्रारंभिक के nबजाय इसे भर देगा ।

ऐनक का कहना है कि इंटरमीडिएट आउटपुट में एक पूर्ण कार्यक्रम या तर्क के बिना एक समारोह होना चाहिए
1111 पर अज्ञानता

@EmbodimentofIgnorance मुझे पता है, यही मेरे पास है। पहला लैंबडा फ़ंक्शन एक longफंक्शन-पैरामीटर लेता है , और दूसरा लैम्ब्डा फ़ंक्शन एक अप्रयुक्त Voidपैरामीटर लेता है , जिसका उपयोग मैं हमेशा बिना इनपुट लेने के लिए बताए चुनौतियों के लिए करता हूं क्योंकि v->1 बाइट इससे छोटा है ()->
केविन क्रूज़सेन

2

हास्केल , 195 164 बाइट्स

main=putStr(x++show x++"\na=")>>(getLine:cycle[pure$show$a-1])!!a>>=putStr
x="main=putStr(x++show x++\"\\na=\")>>(getLine:cycle[pure$show$a-1])!!a>>=putStr\nx="
a=0

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

यह एक बहुत ही सरल क्वीन तकनीक का उपयोग करता है। हम इसे एक चर के साथ संशोधित करते हैं aजो एक संख्या पर सेट होता है। यदि वह संख्या शून्य है (जो शुरू में है) तो हम इनपुट लेते हैं और इनपुट स्रोत पर aसेट के साथ अपने स्रोत को आउटपुट करते हैं । यदि aहम शून्य नहीं हैं, तो हम अपने स्रोत aको एक कम पर सेट करते हैं। यह aस्रोत मूल स्रोत को आउटपुट करने से पहले शून्य तक गिना जाता है।



2

आर , 92 बाइट्स

f=function(n=-1){gsub("\\s","",paste("f=",sub("-?\\d+",n-1,paste(deparse(f),collapse=""))))}

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

अगर deparseधोखा माना जाता है, तो यहां एक विकल्प है:

आर , 108 बाइट्स

function(n=-1){s="function(n=%d){s=%s%s%2$s;sprintf(s,n-1,intToUtf8(34),s)}";sprintf(s,n-1,intToUtf8(34),s)}

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


1

पर्ल 6 , 44 बाइट्स

<say '<',S{\d+}=get||0-1,'>~~.EVAL'>~~.EVAL

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

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


1

C # (विजुअल C # इंटरएक्टिव कंपाइलर) , 112 बाइट्स

void f(int n=-1){var s="void f(int n={2}){{var s={0}{1}{0};Write(s,(char)34,s,n-1);}}";Write(s,(char)34,s,n-1);}

@NickKennedy की बदौलत बहुत सारे बाइट्स बचाए!

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


मध्यवर्ती आउटपुट न तो एक पूर्ण कार्यक्रम है और न ही एक फ़ंक्शन जो एकल तर्क लेता है। इसके अलावा, मुझे लगता है कि आपके पास कुछ ns हैं जो ls होने चाहिए । कैसे के बारे में tio.run/##Sy7WTS7O/P@/...
निक कैनेडी

1

पायथन 3.8 (पूर्व-रिलीज़) , 60 56 55 53 बाइट्स

lambda n=-1,s='lambda n=%d,s=%r:s%%(~-n,s)':s%(~-n,s)

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

-2 बाइट्स जो किंग को धन्यवाद

53 बाइट संस्करण के रूप में, पायथन 2 और पायथन 3 में भी काम करता है।


मध्यवर्ती फ़ंक्शन पूर्ण प्रोग्राम या ऐसा फ़ंक्शन प्रतीत नहीं होता है जो कोई तर्क नहीं लेता है।
निक केनेडी

वह वालरस ऑपरेटर :=पायथन के लिए एक स्वागत योग्य है, यह सुनिश्चित करने के लिए है।
mbomb007

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

@NickKennedy युक्ति का अनुपालन करने के लिए अद्यतन किया गया, और संयोग से 4 बाइट्स बचाए गए।
नकारात्मक सात

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