একটি টাইম মেশিন কুইন লিখুন


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]

নতুন প্রোগ্রামের কোডটি স্ট্রিং হিসাবে আউটপুট হওয়া উচিত? অথবা এটি কোনও ফাইল এবং ফাইল নাম আউটপুট সংরক্ষণ করা উচিত?
মেগো

@ মেগো এটিকে স্ট্রিং হিসাবে আউটপুট করুন (এটি 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)

উপর নির্মিত আমার অন্যান্য quine কিন্তু পরিবর্তনগুলি প্রোগ্রাম , এই কাজের সহজ তাই আমি গলফ এই বিষয়ে আরও করতে সক্ষম ছিল। আমি স্টিডিনে ইনপুট নিতে সক্ষম হলে, এটি আরও খাটো হওয়া উচিত should


0

জাভাস্ক্রিপ্ট ES6, 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 [a.leight-prompt () - 1] || "", `a = ‍ [$ { a}]; বি = $ {বি}; বি () `]); বি ()
মামা ফান রোল

উহু. এটা কি? এটি by 66 বাইট: a = [], খ = (x, y) => (a.push (x), `$ {a [alele-y-1] ||" "} \ না = [$ { a}]; b = $ {b} `) _____ \nএকটি আসল নিউলাইন সহ স্থান।
মামা ফান রোল

তারপরে a = [], বি = (x, y) => (এ.পুশ (এক্স), `$ {এ [অ্যাকলেন্থ-ওয়াই -1] ||" "} \ না = $ {জেএসওএন.স্ট্রিংফাই চেষ্টা করুন (a)}; b = $ {b} `) , যা আপনাকে ৮০ বাইটে ছেড়ে দেয় (অবশ্যই \ n প্রতিস্থাপনের পরে)। (যদি এখনও আমার কোডটি সম্ভবত একটি রিপিল স্নিপেট হয়ে থাকে তবে আমার কাছে অন্যান্য পরামর্শ রয়েছে: পি)।
মামা ফান রোল

গত কয়েকটি সংশোধনগুলির কিছুতে অসম্পূর্ণ আউটপুট ফর্ম্যাট ছিল। শেষের অনুবর্তী সংস্করণে রোলড।
সুপারজেডি ২৪
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.