Viết thông dịch viên cho 2B
Tôi thích ngôn ngữ bí truyền 2B của David Catt , có bộ nhớ được lưu trữ trong một băng trong đó mỗi ô là một băng byte riêng biệt ('phụ đề'). Viết một thông dịch viên cho nó!
Đặc tả ngôn ngữ
Thông số kỹ thuật chính thức có thể được tìm thấy ở đây . Trong đặc tả này, "
có nghĩa là một số trong phạm vi 0-9
( 0
được hiểu là 10
) và _
có nghĩa là một chuỗi có độ dài bất kỳ. Mỗi ô lưu trữ một giá trị trong phạm vi 0-255
và tràn / tràn kết thúc xung quanh giống như một BF. (Cảm ơn @ MartinBüttner). Để chuyển đổi văn bản thành số 0-255
, sử dụng mã ASCII . Bởi vì tôi không thể tìm thấy chi tiết nào về điều này, tôi sẽ nói rằng độ dài băng phải là 255
tối thiểu, nhưng nếu bạn biết cách khác xin vui lòng chỉnh sửa.
+-------------+----------------------------------------------------------------------------------------------------------------------------------------+
| Instruction | Description |
+-------------+----------------------------------------------------------------------------------------------------------------------------------------+
| 0 | Zeroes the current cell and clears the overflow/underflow flag. |
| { | If the current cell is zero, jump to the matching }. |
| } | A placeholder for the { instruction. |
| ( | Read a byte from the input stream and place it in the current cell. |
| ) | Write the value of the current cell to the console. |
| x | Store the value of the current cell in a temporary register. |
| o | Write the value of the temporary register to the console. |
| ! | If the last addition overflowed, add one to the current cell. If the last subtraction underflowed, subtract one from the current cell. |
| ? | Performs a binary NOT on the current cell. |
| +" | Adds an amount to the current cell. |
| -" | Subtracts an amount from the current cell. |
| ^" | Moves the subtape up a number of times. |
| V" | Moves the subtape down a number of times. |
| <" | Moves the tape left a number of times. |
| >" | Moves the tape right a number of times. |
| :_: | Defines a label of name _. |
| *_* | Jumps to a label of name _. |
| ~_~ | Defines a function of name _. |
| @_@ | Calls a function of name _. |
| % | Ends a function definition. |
| #_# | Is a comment. |
| [SPACE] | Is an NOP. |
| [NEWLINE] | Is treated as whitespace and removed. |
| [TAB] | Is treated as whitespace and removed. |
+-------------+----------------------------------------------------------------------------------------------------------------------------------------+
Xét nghiệm
+0+0+0+0+0+0+0+2)+0+0+9)+7))+3)-0-0-0-0-0-0-0-9)+0+0+0+0+0+0+0+0+7)-8)+3)-6)-8)-7-0-0-0-0-0-0)
Nên đầu ra Hello world!
+1:i:{()*i*}
Sắp xếp một cat
chương trình, chỉ cần không có một dòng mới.
+1:loop:{@ReadChar@*loop*}@PrintHello@@WriteAll@(~ReadChar~(x-0-3<2o^1>1+1>1%~PrintHello~+0+0+0+0+0+0+0+2)-1+0+0+0)+7))+3)+1-0-0-0-0-0-0-0-0)%~WriteAll~<1x:reverse:{<1v1>1-1*reverse*}o-1:print:{-1<1)^1>1*print*}%
Trước tiên, nên chấp nhận một tên, sau đó, khi nhấn Return, nên xuất ra Hello name
(trong đó tên là những gì đã được nhập).
Tín dụng cho chương trình đó được gửi đến David Catt .
Tôi đang làm việc trên một chương trình thử nghiệm đầy đủ.
Quy tắc
- Sơ hở tiêu chuẩn bị cấm
- Thông dịch viên của bạn phải đáp ứng tất cả các thông số kỹ thuật, ngoại trừ các ý kiến, không bắt buộc.
Chấm điểm
- Đây là môn đánh gôn , vì vậy ít byte nhất sẽ thắng!
- -10 byte nếu trình thông dịch của bạn xử lý các bình luận.
Bảng xếp hạng
Dưới đây là một Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.
Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:
# Language Name, N bytes
nơi N
là kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh chúng qua. Ví dụ:
# Ruby, <s>104</s> <s>101</s> 96 bytes