टाइम मशीन क्वीन लिखिए


21

एक प्रोग्राम लिखें जो इनपुट स्ट्रिंग और पूर्णांक के रूप में लेता है n, और आउटपुट:

  1. स्ट्रिंग जो प्रोग्राम से nपहले समय के लिए पारित किया गया था;
  2. एक नया कार्यक्रम जिसका उपयोग अगले आह्वान के लिए किया जाएगा।

आप प्रोग्राम के बाहर कोई डेटा स्टोर नहीं कर सकते हैं, और आपका प्रोग्राम पिछले प्रोग्राम को चेन में नहीं बुला सकता है। यदि स्ट्रिंग मौजूद नहीं है, तो एक खाली स्ट्रिंग आउटपुट करें (लेकिन फिर भी अगले प्रोग्राम को आउटपुट करें)।

उदाहरण रन, जहां मैं program_nप्रत्येक क्रमिक कार्यक्रम के लिए अंकन का उपयोग करता हूं (निश्चित रूप से, [This text is the nth program]वास्तविक कोड के साथ बदल दिया जाएगा।)

$ program_1 "One" 1
[This text is the second program]
$ program_2 "Two" 1
One
[This text is the third program]
$ program_3 "Three" 2
One
[This text is the fourth program]
$ program_4 "Four" 2
Two
[This text is the fifth program]
$ program_5 "Five" 1
Four
[This text is the sixth program]

क्या नए प्रोग्राम का कोड एक स्ट्रिंग के रूप में आउटपुट होना चाहिए? या इसे फ़ाइल और फ़ाइल नाम आउटपुट में सहेजा जाना चाहिए?
मीगो

@Mego इसे एक स्ट्रिंग के रूप में आउटपुट करता है (जो कि STDOUT को है)। आपको नए प्रोग्राम को फ़ाइल में कॉपी करने की आवश्यकता नहीं है।
अनुपिन

"आउटपुट नथिंग" से, क्या आपका मतलब अगले प्रोग्राम का आउटपुट है, लेकिन नॉन (नॉन-प्रेजेंट) स्ट्रिंग का नहीं?
मीगो

@ मेगा हां, यही मेरा मतलब है।
अबिन्थे

आप program_n+1आउटपुट लाइन में भी जोड़ सकते हैं जैसे [program_3, One]कि वही है जो आप देखना चाहते हैं। यदि दोनों आउटपुट अलग-अलग हो जाते हैं, तो उन्हें कैसे अलग किया जाना चाहिए? पूर्ण कार्यक्रमों के बजाय फ़ंक्शन की अनुमति है?
यादृच्छिक

जवाबों:


4

सीजेम, 25

L{\_l~(>1<lN+a@+`@"_~"}_~

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

स्पष्टीकरण:

L      push an empty array (this is the array of previous strings)
{…}    push this block
_      duplicate the block
~      execute the 2nd copy (the stack contains the array and the block)

खंड:

\      swap the array with the block
_      duplicate the array
l      read a line from the input (containing the integer n)
~(     evaluate n and decrement it
>      slice the array starting at that position
1<     slice the resulting array to keep only the first string (if any)
l      read the 2nd line from the input (containing the string)
N+     append a newline
a      wrap in an array
@      bring the previous array to the top
+      concatenate the arrays, thus prepending the new string
`      convert the array to its string representation
@      bring the block to the top
"_~"   push this string

अंत में, अनुरोधित स्ट्रिंग (यदि कोई हो), सरणी का प्रतिनिधित्व, ब्लॉक और स्ट्रिंग "_ ~" स्वचालित रूप से मुद्रित होते हैं।


2

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

import sys
o,p=[''],r'import sys;a,o,p=int(sys.argv[2]),[{2},{0}],{1};print o[a] if len(o)>a else "","\n",p.format(`sys.argv[1]`,`p`,",".join(`s`for s in o))'
print '\n',p.format(`sys.argv[1]`,`p`,','.join(`s`for s in o))

इसे आसानी से जांचने के लिए ./thisgolf.py "yourfirststring" | python -c "import sys;exec(sys.stdin.read().split('\n')[1])" "your second string" <N>, पिछले बिट को जितनी बार चाहें उतनी बार दोहराएं।


2

पायथन 2, 207 बाइट्स

def r(O,R):import sys,marshal as m;a=sys.argv;b=int(a[2]);O.extend(["",""]*b);O[b]=a[1];print"%s\nfrom marshal import*;c=%r;i=lambda:0;i.__code__=loads(c);i(%r,i)"%(O[0],m.dumps(R.__code__),O[1:])
r([""],r)

मेरे अन्य क्वीन लेकिन परिवर्तन कार्यक्रम पर निर्मित , यह कार्य सरल है इसलिए मैं इसे आगे बढ़ाने में सक्षम था। अगर मैं स्टड करने के लिए इनपुट लेने में सक्षम था, तो यह बहुत कम होना चाहिए।


0

जावास्क्रिप्ट ईएस 6, 130 128 121 120 113 बाइट्स

a=[];b=_=>{a.push(prompt());console.log((a[a.length-prompt()-1]||"")+`
a=`+JSON.stringify(a)+";b="+b+";b()")};b()

नीचे 87: a = []; b = _ => (a.push (प्रॉम्प्ट)), [[a.length- प्रॉम्प्ट () - 1] || "", `a = [[$ { a}]; b = $ {b}; b () `]); b ()
मामा फन रोल

ओह। यह होगा? यह 66 बाइट्स है: a = [], b = (x, y) => (a.push (x), `$ {a [a.length-y-1] ||" ""} \ n = [$ { a}]; b = $ {b} `) _____replace \nएक वास्तविक न्यूलाइन के साथ।
मामा फन रोल

फिर a = [], b = (x, y) => (a.push (x), `$ {a [a.length-y-1] ||" "} \ n = $ {JSON.stringify का प्रयास करें (a)}; b = $ {b} `) , जो आपको 80 बाइट्स (\ n की जगह) के बाद छोड़ता है। (यदि आपको अभी भी मेरे कोड के साथ एक समस्या है, संभवतः एक REPL स्निपेट है, तो मेरे पास अन्य सुझाव हैं: P)।
मामा फन रोल

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