Viết một cỗ máy thời gian


21

Viết chương trình lấy đầu vào là chuỗi và số nguyên nvà đầu ra:

  1. Chuỗi đã được truyền cho chương trình nlần trước;
  2. Một chương trình mới sẽ được sử dụng cho lần gọi tiếp theo.

Bạn không thể lưu trữ bất kỳ dữ liệu nào bên ngoài chương trình và chương trình của bạn không thể gọi các chương trình trước đó trong chuỗi. Nếu chuỗi không tồn tại, hãy xuất một chuỗi trống (nhưng vẫn xuất chương trình tiếp theo).

Chạy ví dụ, trong đó tôi sử dụng ký hiệu program_ncho từng chương trình liên tiếp (Tất nhiên, [This text is the nth program]sẽ được thay thế bằng mã thực tế.)

$ 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]

Mã chương trình mới có nên được xuất thành một chuỗi không? Hoặc nó nên được lưu vào một tập tin và đầu ra tên tệp?
Mego

@Mego Xuất nó dưới dạng một chuỗi (nghĩa là thành STDOUT). Bạn không cần phải thực hiện sao chép chương trình mới vào một tệp.
absinthe

Theo "đầu ra không có gì", bạn có nghĩa là đầu ra chương trình tiếp theo, nhưng không phải là chuỗi (không tồn tại)?
Mego

@Mega Vâng, đó là những gì tôi muốn nói.
absinthe

Bạn cũng có thể thêm program_n+1's vào dòng đầu ra như [program_3, One]nếu đó là những gì bạn muốn thấy. Nếu cả hai đầu ra đi vào thiết bị xuất chuẩn thì nên tách chúng như thế nào? Ngoài ra chức năng được phép thay vì chương trình đầy đủ?
ngẫu nhiên

Câu trả lời:


4

CJam, 25

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

Dùng thử trực tuyến

Giải trình:

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)

Khối:

\      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

Cuối cùng, chuỗi được yêu cầu (nếu có), biểu diễn của mảng, khối và chuỗi "_ ~" được in tự động.


2

Python, 221 byte

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))

Để kiểm tra điều này một cách dễ dàng, hãy sử dụng ./thisgolf.py "yourfirststring" | python -c "import sys;exec(sys.stdin.read().split('\n')[1])" "your second string" <N>, lặp lại bit cuối cùng bao nhiêu lần tùy thích.


2

Python 2, 207 byte

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)

Được xây dựng trên chương trình khác nhưng thay đổi chương trình , nhiệm vụ này đơn giản hơn nên tôi có thể chơi gôn này hơn nữa. Nếu tôi có thể lấy đầu vào cho stdin, thì nó sẽ ngắn hơn nhiều.


0

Javascript ES6, 130 128 121 120 113 byte

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

xuống còn 87: a = []; b = _ => (a.push (prompt ()), [a [a.length-prompt () - 1] || "", `a = ‌ [$ { a}]; b = $ {b}; b () `]); b ()
Mama Fun Roll

Oh. Điều này sẽ? Đó là 66 byte: a = [], b = (x, y) => (a.push (x), `$ {a [a.length-y-1] ||" "} \ na = [$ { a}]; b = $ {b} `) _____ \nvới một dòng mới thực sự.
Mama Fun Roll

Sau đó thử a = [], b = (x, y) => (a.push (x), `$ {a [a.length-y-1] ||" "} \ na = $ {JSON.opesify (a)}; b = $ {b} `) , để lại cho bạn 80 byte (tất nhiên sau khi thay thế \ n). (Nếu bạn vẫn gặp sự cố với mã của tôi có thể là đoạn mã REPL, thì tôi có các đề xuất khác: P).
Mama Fun Roll

Một số trong những sửa đổi gần đây có định dạng đầu ra không tuân thủ. Quay trở lại phiên bản tuân thủ cuối cùng.
SuperJedi224
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.