Одной из многих уникальных особенностей языка программирования Malbolge является его крайне неинтуитивный OP
оператор, упоминаемый в документации и исходном коде только как «op», но широко известный как оператор «сумасшедший». Как описывает Бен Олмстед, создатель языка, в его документации: « не ищите шаблон, его там нет ».
op является оператором "tritwise" - он работает с соответствующими троичными цифрами своих двух аргументов. Для каждого трита (троичного бита) результат операции определяется следующей таблицей поиска:
a
op(a,b) 0 1 2
+-------
0 | 1 0 0
b 1 | 1 0 2
2 | 2 2 1
Например, чтобы вычислить op(12345, 54321)
, сначала запишите оба числа в троичной форме, а затем найдите каждую пару тритов в таблице:
0121221020 (12345_3)
op 2202111220 (54321_3)
--------------
2202220211 (54616_3)
Последний важный момент является то, что все значения в Malbolge 10 trits шириной, поэтому входные значения должны быть дополнены нулями до ширины 10. (например, op(0, 0)
находится 1111111111
в трехкомпонентном.)
Ваша задача - взять два целых числа 0 ≤ a
, b
<59049 в качестве входных данных и вывести целочисленное значение op(a,b)
.
Тестовые случаи (в формате a b op(a,b)
):
0 0 29524
1 2 29525
59048 5 7
36905 2214 0
11355 1131 20650
12345 54321 54616
Вот эталонная реализация (скопированная непосредственно из исходного кода Malbolge).
54616_3
это не значит, что «эта другая вещь - десятичное число 54616, но представлена как основа три». Это означает «Читать 54616
как основание 3». Что, конечно, вы не можете сделать (есть цифры, на которые Valve не может сосчитать). Вероятно, было бы все так же ясно, если бы вы избавились от всего _3
, и более точным.