Una de las muchas características únicas del lenguaje de programación Malbolge es su OPoperador muy poco intuitivo , conocido como "op" en la documentación y el código fuente, pero conocido popularmente como el operador "loco". Según lo descrito por Ben Olmstead, el creador del lenguaje, en su documentación: " no busque el patrón, no está allí ".
op es un operador "tritwise": opera en los dígitos ternarios correspondientes de sus dos argumentos. Para cada trit (bit ternario), el resultado de op viene dado por la siguiente tabla de búsqueda:
a
op(a,b) 0 1 2
+-------
0 | 1 0 0
b 1 | 1 0 2
2 | 2 2 1
Por ejemplo, para calcular op(12345, 54321), primero escriba ambos números en ternario y luego busque cada par de trits en la tabla:
0121221020 (12345_3)
op 2202111220 (54321_3)
--------------
2202220211 (54616_3)
El último punto importante es que todos los valores en Malbolge tienen 10 trits de ancho, por lo que los valores de entrada deben rellenarse con ceros a un ancho de 10. (Por ejemplo, op(0, 0)es 1111111111ternario).
Su tarea es tomar dos enteros 0 ≤ a, b<59049 como entrada y generar el valor entero de op(a,b).
Casos de prueba (en el formato a b op(a,b)):
0 0 29524
1 2 29525
59048 5 7
36905 2214 0
11355 1131 20650
12345 54321 54616
Aquí hay una implementación de referencia (copiada directamente del código fuente de Malbolge).
54616_3no significa "esta otra cosa es el número decimal 54616, pero se representa como base tres". Significa "Leer 54616como base 3". Lo cual, por supuesto, no puede hacer (hay dígitos que Valve no puede contar allí). Probablemente todavía sería igual de claro si se deshiciera del _3todo, y más preciso.