Một trong nhiều tính năng độc đáo của ngôn ngữ lập trình Malbolge là OP
toán tử không trực quan cao của nó , chỉ được gọi là "op" trong tài liệu và mã nguồn nhưng thường được gọi là toán tử "crazy". Theo mô tả của Ben Olmstead, người tạo ra ngôn ngữ, trong tài liệu của mình: " đừng tìm mẫu, nó không có ở đó ."
op là một toán tử "tritwise" - nó hoạt động trên các chữ số thứ ba tương ứng của hai đối số của nó. Đối với mỗi trit (bit ternary), kết quả của op được đưa ra bởi bảng tra cứu sau:
a
op(a,b) 0 1 2
+-------
0 | 1 0 0
b 1 | 1 0 2
2 | 2 2 1
Ví dụ, để tính toán op(12345, 54321)
, đầu tiên hãy viết ra cả hai số trong ternary và sau đó tra cứu từng cặp trits trong bảng:
0121221020 (12345_3)
op 2202111220 (54321_3)
--------------
2202220211 (54616_3)
Điểm quan trọng cuối cùng là tất cả các giá trị trong Malbolge đều rộng 10 trits, do đó, các giá trị đầu vào phải được đệm bằng các số 0 đến chiều rộng 10. (Ví dụ: op(0, 0)
nằm 1111111111
ở vị trí thứ ba.)
Nhiệm vụ của bạn là lấy hai số nguyên 0 a
, b
<59049 làm đầu vào và xuất giá trị nguyên của op(a,b)
.
Các trường hợp thử nghiệm (ở định dạng a b op(a,b)
):
0 0 29524
1 2 29525
59048 5 7
36905 2214 0
11355 1131 20650
12345 54321 54616
Đây là một triển khai tham chiếu (được sao chép trực tiếp từ mã nguồn Malbolge).
54616_3
không có nghĩa là "điều khác này là số thập phân 54616, nhưng được biểu thị dưới dạng số ba". Nó có nghĩa là "Đọc 54616
như cơ sở 3". Điều đó, tất nhiên, bạn không thể làm (có những chữ số mà Valve không thể đếm được ở đó). Có lẽ vẫn còn rõ ràng nếu bạn loại bỏ _3
hoàn toàn, và chính xác hơn.