Trong thử thách này, bạn sẽ viết một thông dịch viên cho một ngôn ngữ đơn giản mà tôi đã tạo nên. Ngôn ngữ dựa trên một bộ tích lũy A, có độ dài chính xác một byte. Khi bắt đầu một chương trình, A = 0. Đây là các hướng dẫn ngôn ngữ:
!
: Nghịch đảo
Hướng dẫn này chỉ đơn giản là đảo ngược mọi bit của bộ tích lũy. Mỗi số không trở thành một và mọi người trở thành số không. Đơn giản!
>
: Chuyển sang phải
Hướng dẫn này dịch chuyển từng bit trong A một nơi sang phải. Bit ngoài cùng bên trái trở thành số 0 và bit ngoài cùng bên phải bị loại bỏ.
<
: Sang trái
Hướng dẫn này dịch chuyển từng bit trong A một nơi sang trái. Bit ngoài cùng bên phải trở thành số 0 và bit ngoài cùng bên trái bị loại bỏ.
@
: Hoán đổi Nybble
Hướng dẫn này hoán đổi bốn bit trên cùng của A với bốn bit dưới cùng. Ví dụ: Nếu A là 01101010
và bạn thực thi @
, A sẽ là 10100110
:
____________________
| |
0110 1010 1010 0110
|_______|
Đó là tất cả các hướng dẫn! Đơn giản phải không?
Quy tắc
- Chương trình của bạn phải chấp nhận đầu vào một lần khi bắt đầu. Đây sẽ là một dòng mã. Đây không phải là một thông dịch viên tương tác! Bạn chỉ có thể chấp nhận đầu vào một lần và không phải lặp lại từ đầu khi dòng đó đã được thực thi.
- Chương trình của bạn phải đánh giá đầu vào nói. Mỗi nhân vật không được đề cập ở trên được bỏ qua.
- Chương trình của bạn sau đó sẽ in ra giá trị cuối cùng của bộ tích lũy, theo số thập phân.
- Quy tắc thông thường cho các ngôn ngữ lập trình hợp lệ được áp dụng.
- Sơ hở tiêu chuẩn là không được phép.
- Đây là mã golf , số byte nhỏ nhất sẽ thắng.
Dưới đây là một số chương trình nhỏ để kiểm tra bài nộp của bạn. Trước mũi tên là mã, sau đó là kết quả mong đợi:
!
->255
!>>
->63
!<@
->239
!nop!&6*!
->255
Thưởng thức!
! -> 255
đoán rằng chúng ta sẽ sử dụng 8 bit cho mỗi byte ở đây? Câu hỏi không rõ ràng.