सबसे लंबे समय तक चलने वाली रानी


10

जैसा कि हम जानते हैं, एक क्वीन एक प्रोग्राम है जो अपने स्वयं के सोर्स कोड को आउटपुट करता है। हालाँकि, ऐसा प्रोग्राम लिखना भी संभव है जो दूसरे प्रोग्राम को अलग करता है, जो पहले प्रोग्राम को फिर से आउटपुट करता है। उदाहरण के लिए, पायथन 2 कार्यक्रम

x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3

जब चलाया जाएगा, तो निम्न पाठ का उत्पादन:

print """x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3"""

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

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

कृपया निम्नलिखित नियमों और स्पष्टीकरणों पर ध्यान दें:

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

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


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

1
@ चुनौती बाइट की एक छोटी संख्या में बड़ी संख्या को निर्दिष्ट करने के बारे में ठीक है, हाँ। यह संपूर्ण सिद्धांत है जिसके चारों ओर इसे डिजाइन किया गया था। सवाल यह है कि क्या आपकी भाषा में 100 बाइट्स में सबसे अधिक संख्या 3 ^ ^ ^ 3 है जिसे आप निर्दिष्ट कर सकते हैं, या क्या कोई बड़ा है? यही चुनौती है। यह इसका मूल है। यह वही है जो मैं लोगों को करते देखना चाहता था। यह एक सुपर है, यह एक संरचना के लिए कुछ भी नहीं है कि एक चुनौती के लिए एक सतही समानता के आधार पर बंद करने के लिए सुपर निराशा होती है।
नाथनियल

1
@Dave (दूसरी टिप्पणी) लेकिन अगर आप चतुर हैं, तो आपको मशीन की सटीकता से सीमित होने की आवश्यकता नहीं है। मुझे उम्मीद है कि प्रतिस्पर्धी जवाबों की अवधि 2 ^ (2 ^ 64) से बहुत अधिक होगी।
नाथनियल

3
तो क्या आप इसे codegolf.stackexchange.com/q/18028/194 के डुप्लिकेट के रूप में बंद करना पसंद करेंगे ?
पीटर टेलर

1
@PeterTaylor यह एक बहुत करीबी विषय है, लेकिन यह अभी भी एक बहुत ही अलग चुनौती है - एक संख्या को प्रिंट करना कई बार बड़ी संख्या में कुछ करने से काफी अलग है। मैं निश्चित रूप से इसे बंद नहीं करना पसंद करूंगा।
नथानिएल

जवाबों:


10

PHP, अवधि 2,100,000,000

किसने सोचा होगा कि यह PHP में संभव है ?! :-)

यह वास्तव में मेरी पहली क्वीन है और यह 99 बाइट लंबी है:

<?$i=1;$i*=21e8>$i;printf($a='<?$i=%d;$i*=21e8>$i;printf($a=%c%s%c,++$i,39,$a,39);',++$i,39,$a,39);

यद्यपि PHP से 2 * 10^8स्विच करने से बड़ी संख्या का समर्थन करता integerहै double, वेतन वृद्धि अब काम नहीं करती है (एक अनंत लूप की ओर जाता है) और मुझे एक और समाधान नहीं मिला है जो 100 बाइट्स में फिट बैठता है। फिर भी।

सबूत काफी सरल है, क्योंकि यह केवल प्रत्येक पुनरावृत्ति पर गिन रहा है जब तक कि यह 2.1 बिलियन पर रीसेट बिंदु तक नहीं पहुंचता है।

करने के लिए क्रेडिट डेव , जो टिप्पणी में और करने के लिए छद्म कोड में दृष्टिकोण तैनात बॉब Twells , जिनमें से मैं एक न्यूनतम पीएचपी Quine के लिए कोड की नकल की।

परीक्षण कार्यक्रम (नारा):

<?php
$o = file_get_contents('quine.php');
for ($i = 0; $i < 22e8; $i++) {
    if ($i%2==0) exec('php q > p'); else exec('php p > q');
    $a = file_get_contents(($i%2==0) ? 'p' : 'q');
    echo "\r" . str_pad($i,6,' ') . ":\t$a";
    if ($a == $o) {
        die;
    }
}

ठीक है, कम से कम मैं जवाब देने वाला पहला व्यक्ति हूं।


1
साइड-नोट: यह ~ 10 ^ 9.322219295 के आदेश पर है।
लीजनमोनमल 978

8

गणितज्ञ, अवधि E8.5678 # 3 E2.1923 # 4 ~ E6.2695 # 3 # 2

Print[ToString[#0, InputForm], "[", #1 - 1 /. 0 -> "Nest[#!,9,9^9^99!]", "]"] & [Nest[#!,9,9^9^99!]]

ध्यान दें कि स्कोर हाइपर-ई अंकन में वर्णित हैं । पुनरावृत्तियों - 1, - 2, - 3, ..., 3, 2, 1, और वापस Nest[#!,9,9^9^99!]के दशमलव विस्तार के साथ अंतिम को प्रतिस्थापित करता है ।Nest[#!,9,9^9^99!]Nest[#!,9,9^9^99!]Nest[#!,9,9^9^99!]Nest[#!,9,9^9^99!]


भाज्य तेजी से नहीं बढ़ेंगे?
माल्टीसेन

1
मैं गणितज्ञ को नहीं जानता, लेकिन क्या यह एक क्वीन के लिए नियमों का उल्लंघन नहीं है - इसे पढ़ना खुद का सोर्स कोड है? ToString[#0, InputForm]
daniero

तो, सिर्फ 9 !!!! काम नहीं करता है? आईडी क्यू मैं अभी मेरे साथ मेरी गणित आरपीआई नहीं है।
माल्टीसेन

@ मैल्तेसेन नौ के दोहरे तथ्य के दोहरे तथ्य की गणना करता है, या (9 !!) !! ≈ 2.116870635 · 10¹²⁰²
लीजनमोनल 978

@daniero मेरा मतलब है, विचार एक मानक CJam के समान है {"_~"}_~, इसलिए मुझे लगता है कि यह वैध होना चाहिए ...
LegionMammal978

5

आर, उम्मीद के साथ यादृच्छिक अवधि 2 ^ 19936-0.5

f=function(){
    options(scipen=50)
    body(f)[[4]]<<-sum(runif(623))
    0
    cat("f=")
    print(f)
}

R के डिफ़ॉल्ट यादृच्छिक संख्या जनरेटर की अवधि 2 ^ 19937-1 है और 623 लगातार आयामों में समान है। इस प्रकार, इसकी अवधि में कहीं (लेकिन केवल एक बार) शून्य का 623-लंबा वेक्टर होगा। जब हम वहां पहुंचते हैं (और अनुक्रम की शुरुआत के साथ संरेखित होते हैं) तो अगले 623 यादृच्छिक यू [0,1] संख्याओं का योग शून्य होगा और हम अपने मूल कार्यक्रम पर लौट आते हैं।

ध्यान दें कि शून्य पर लौटने से पहले प्रोग्राम कई बार गैर-शून्य स्थिति से गुजरता है। उदाहरण के लिए, 311.5 का योग सबसे अधिक संभावना है, और ऐसे कई तरीके हैं जो हो सकते हैं, लेकिन RNG 0 की अवधि को 311.5 के लिए अवधि से अधिक होने की अनुमति देता है।


निश्चित नहीं है कि आप इस प्रविष्टि को किस अंक में निर्दिष्ट करना चाहते हैं: P
JDL

1
नियमों के अनुसार: "सटीक संख्या देने के बजाय" कम से कम 1,000,000 पुनरावृत्तियों "की तरह कुछ कहना ठीक है" तो मेरे विचार में यह "कम से कम 1 पुनरावृत्ति" है क्योंकि अगर हम पहली कोशिश में reeeally भाग्यशाली हो जाते हैं ...);
यतिजीएनएन

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

1
एक बार जब यह कार्यक्रम एक बार अपनी आधार स्थिति में वापस आ जाता है, तो उसके पास 2 ^ 19937-1 की गैर-यादृच्छिक अवधि होगी।
JDL

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

1

जावास्क्रिप्ट, अवधि 9,007,199,254,700,000

जीतने के लिए नहीं जा रहा है, लेकिन इस चुनौती पर जावास्क्रिप्ट के साथ काम करना मजेदार था:

a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),1-1||90071992547e5)

निम्नलिखित चक्र का अनुसरण करता है:

a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),1-1||90071992547e5)
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),9007199254700000-1||90071992547e5)
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),9007199254699999-1||90071992547e5)
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),9007199254699998-1||90071992547e5)
// etc...
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),3-1||90071992547e5)
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),2-1||90071992547e5)
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),1-1||90071992547e5)
a="a=%s;console.log(a,uneval(a),%.0f-1||90071992547e5)";console.log(a,uneval(a),9007199254700000-1||90071992547e5)
// and so on

नोट: आप इसे 18 बाइट्स छोटे कर सकते हैं, जबकि केवल ~ 0.08% स्कोर को हटा सकते हैं, जैसे:

a="a=%s;console.log(a,uneval(a),%.0f-1||9e15)";console.log(a,uneval(a),1-1||9e15)

1

सी, अवधि 2,100,000,000

unsigned long long i;main(a){i=1;i*=21e8>i;printf(a="ungisned long long i;main(a){i=%d;i*=21e8>i;printf(a=%c%s%2$c,++i,34,a);}",++i,34,a);}

PHP उत्तर (स्पष्ट रूप से) के आधार पर। मेरे पास समय होने पर स्पष्टीकरण के साथ अपडेट होगा।



1

अजगर २

अवधि: 9((99↑↑(9((99↑↑(9((99↑↑(9↑↑5-1))9)-1))9)-1))9)+1

@Bubbler से बढ़ती अवधि के लिए धन्यवाद 99(99↑↑12)+1 अब तक

b=0;s="print'b=%d;s=%r;exec s'%(-~b%eval('9**9'*eval('9**9'*eval('9**9'*9**9**9**9**9))),s)";exec s

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

कोड में तब तक और इसके बाद तक b=0परिवर्तन b=1तब b=2तक b=decimal expansion of the periodवापस आ जाता हैb=0


1
9**9**9**9**9**9**9**9**9**9**9**9**9**9**9**9**9**9से बहुत अधिक है 9**9**99**99**99**99**99**99**99**99**99**99**99**99। उस ने कहा, आप eval('9**9'*eval('9**9'*eval('9**9'*9**9**9**9**9)))बहुत अधिक संख्याओं के लिए कुछ कर सकते हैं ।
बब्बलर

पेरोड का मतलब क्या है?
एसएस ऐनी


1
@ मुकुंदन मुझे लगता है कि आप अवधि का मतलब हो सकता है लेकिन मुझे यकीन नहीं है। मैं समझता हूं कि टेट्रेशन क्या है।
एसएस ऐनी

@SSAnne खेद है कि यह एक टाइपो था, इसे इंगित करने के लिए धन्यवाद
मुकुंदन

0

गोल> <> , 70 बाइट्स, अवधि 325883196621297064957600206175719056476804879488288708188003274919860959534770101079512433396348062803055739640225395758790852315876868469390603793729639715908136196505908165227136154287969475839017544811926036808089596209081885772040898530121921794489026069641113281250

अन्य बुद्धिमान जिन्हें वास्तव में बड़ा कहा जाता है (3.25E270)

":1=l8:*6+=S&Q~:'~'=Q~~'H#'||lPffXfX=?1:1=Q$~$~|:1)lPffXfX(Q?:|r2ssH##

यह वास्तव में उत्तर का एक परिवर्तित संस्करण है जिसे मैंने 500 बाइट इट्रेटर पर रखा है

":1=l8:*6+=S&Q~:'~'=Q~~'H#'||//if last is equal to 1 and length is 71, delete the delete char, if the last char is '~', delete and push 'H#', which will later return to 'H##', completing the cycle!
lPffXfX=?1:1=Q$~$~|          //if length is equal to 15^15^15, then start delete process(append ascii one)
:1)lPffXfX(Q?:|              //if the last character is not 1 (the delete checker), and length is less than 15^15^15, duplicate the last value and append
r2ssH##                      //push the " to the front and output the whole thing

उम्मीद है कि मुझे स्कोर सही मिला, और बग नहीं हैं। वास्तव में इस मूल्य की गणना करने का कोई वास्तविक तरीका नहीं है , यह सैद्धांतिक है। लेकिन यार, वो बहुत बड़ी संख्या है !!!

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

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