Tạo một ngôn ngữ và cách thực hiện giống như Muriel


9

Muriel là một ngôn ngữ mà cách duy nhất để lặp là tạo ra một câu đố và thực hiện nó. Công việc của bạn là tạo ngôn ngữ của riêng bạn với thuộc tính này và triển khai ngôn ngữ đó bằng ngôn ngữ đã có từ trước.

Chúng tôi sẽ định nghĩa một ngôn ngữ giống như Muriel như sau:

  1. Nó có một lệnh tích hợp để thực thi mã bằng ngôn ngữ của chính nó, tương tự như @lệnh của Muriel hoặc python exec.
  2. Đó là Turing hoàn thành.
  3. Nếu bạn loại bỏ lệnh thực thi tích hợp, nó không còn hoàn thành Turing.

Muriel giống như Muriel với @lệnh thực thi tích hợp sẵn. Smurf cũng giống Muriel (lệnh thực thi tích hợp của nó là x). Python không giống Muriel, vì nó vẫn hoàn thành Turing nếu bạn gỡ bỏ exec.

Công việc của bạn là tạo ra một ngôn ngữ lập trình giống như Muriel, và sau đó cung cấp việc triển khai nó bằng ngôn ngữ bạn chọn. Điểm của bạn là thời gian thực hiện mà bạn đang cố gắng giảm thiểu.

Ghi chú:

  1. Việc thực thi tích hợp của bạn không cần phải hoạt động chính xác như Muriel. Tùy thuộc vào cách bạn xử lý việc chấm dứt chương trình con, lỗi, phạm vi, v.v ...
  2. Ngôn ngữ bạn viết thực hiện không thể tự nó có Muriel-như thế nào. (Điều này là do đó @không phải là một mục hợp lệ.) Nó cũng phải tồn tại trước bài viết này.

Underload có phải là ngôn ngữ giống Muriel không?
alephalpha

@JerryJeremiah Bản chỉnh sửa của tôi có làm cho nó rõ ràng hơn không?
PyRulez

@alephalpha wiki đó nói rằng "Không có ^, chương trình còn lại sẽ luôn giảm kích thước, cuối cùng tạm dừng." Nếu điều này là đúng, thì đúng, Underload giống như Muriel.
PyRulez

Bạn làm gì nếu ngôn ngữ đích của bạn có nhiều evallệnh? (Ví dụ: Python execeval) Yêu cầu loại bỏ tất cả chúng để mất TCness?
Máy

1
@PyRulez Tôi nghĩ rằng đây nên là cuộc thi phổ biến hơn là chơi gôn, bởi vì nếu không, việc lựa chọn ngôn ngữ thực hiện sẽ biến nó thành một thách thức của tắc kè hoa
Uriel

Câu trả lời:


3

Python 3 và "Tập hợp con TC tối thiểu của Underload nhưng với các ký tự được thay đổi thành 2019, đảo ngược và với một 0đầu trên", 156 byte

c=input()
n=1
t=c
s=[]
while c:
 *c,i=c
 if n:
  if"6">i:n+=int(i)-1
  if n:t=[i]+t
  else:s+=[t];t=[]
 elif"2"==i:n=1
 elif"2">i:s+=s[-1:]
 else:c+=s.pop()

Hãy thử trực tuyến!

Giải thích trong tiêu đề, nhận xét mã trong phần chân trang.


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.