Đây là một định nghĩa ngôn ngữ rất đơn giản:
A Variable is any string that does not contain ^, <, >, !, or ?
The empty string is a valid variable identifier
The value of every variable starts at 0.
A Statement is one of (var is a Variable, P is a Program):
var^ -> changes var to be equal to 1 more than itself
var<P> -> while var > 0, changes var to be equal to 1 less than itself, then runs P
var! -> output value of var
var? -> ask for non-negative integer as input, increase var by that value
A Program is a concatenation of Statements, running a Program means running each Statement in order
Các chương trình ví dụ (lưu ý rằng chuỗi rỗng là một biến, nhưng tôi sẽ sử dụng nó một cách tiết kiệm vì mục đích rõ ràng và một số biến bị loại bỏ trong chương trình khi chúng thường là 0 theo mặc định):
<>: sets the value of the empty string variable to 0
b<>b?b<a^>: asks for b, then adds the value stored in b to a, zeroing b in the process
b<>b?a<>b<a^>: asks for b, then sets a to the value of b, zeroing b in the process
a<>c<>b<a^c^>c<b^> : copies the value in b into a without zeroing it
b<>c<>a<c^c^c<b^>>b! : outputs a multiplied by 2
b^b<a<>a?a!b^> : outputs what you input, forever
Mục tiêu của bạn là viết trình thông dịch nhỏ nhất cho ngôn ngữ này.
Giá trị của một biến có thể lớn tùy ý và chỉ nên bị giới hạn bởi tổng bộ nhớ mà ngôn ngữ của bạn có quyền truy cập, theo lý thuyết, nhưng bạn chỉ được yêu cầu xử lý các giá trị lên tới 2 ^ 256.
Về mặt lý thuyết, chương trình của bạn sẽ có thể xử lý các chương trình dài tùy ý, nhưng bạn sẽ chỉ được yêu cầu làm việc trên các chương trình dài dưới 2 ^ 32 ký tự. Bạn cũng được yêu cầu xử lý các vòng lặp lồng nhau có độ sâu lên tới 2 ^ 32.
Bạn có thể giả định rằng chương trình là một chương trình hợp lệ và bạn sẽ chỉ nhận được các số nguyên không âm khi bạn yêu cầu nhập liệu. Bạn cũng có thể giả sử rằng chỉ các ký tự có thể in ASCII được bao gồm trong chuỗi đầu vào.
Tốc độ của chương trình bạn diễn giải không thành vấn đề, nó sẽ rất chậm đối với những thứ đơn giản như phép nhân 5 chữ số, không cần tối ưu hóa.
Nếu bạn muốn sử dụng một ngôn ngữ không thể chấp nhận hợp lý đầu vào hoặc tạo đầu ra theo cách được mô tả bởi ngôn ngữ đó, hãy sử dụng bất kỳ giải thích nào bạn muốn làm cho nó có thể. Điều này áp dụng cho mọi lý do ngôn ngữ của bạn không thể thực hiện một số hành vi cần thiết. Tôi muốn tất cả các ngôn ngữ để có thể cạnh tranh.
Chương trình ngắn nhất sẽ thắng. Tiêu chuẩn áp dụng.