Um dos muitos recursos exclusivos da linguagem de programação Malbolge é seu OP
operador altamente intuitivo , referido apenas como "op" na documentação e no código-fonte, mas conhecido popularmente como operador "louco". Conforme descrito por Ben Olmstead, o criador da linguagem, em sua documentação: " não procure por padrão, ele não está lá ".
op é um operador "tritwise" - opera nos dígitos ternários correspondentes de seus dois argumentos. Para cada trit (bit ternário), o resultado de op é fornecido pela seguinte tabela de pesquisa:
a
op(a,b) 0 1 2
+-------
0 | 1 0 0
b 1 | 1 0 2
2 | 2 2 1
Por exemplo, para calcular op(12345, 54321)
, primeiro escreva os dois números no ternário e, em seguida, procure cada par de trits na tabela:
0121221020 (12345_3)
op 2202111220 (54321_3)
--------------
2202220211 (54616_3)
O último ponto importante é que todos os valores em Malbolge têm 10 trits de largura; portanto, os valores de entrada devem ser preenchidos com zeros até uma largura de 10. (Por exemplo, op(0, 0)
é1111111111
ternário).
Sua tarefa é pegar dois números inteiros 0 ≤ a
, b
<59049 como entrada e gerar o valor inteiro deop(a,b)
.
Casos de teste (no formato a b op(a,b)
):
0 0 29524
1 2 29525
59048 5 7
36905 2214 0
11355 1131 20650
12345 54321 54616
Aqui está uma implementação de referência (copiada diretamente do código fonte do Malbolge).
54616_3
não significa "essa outra coisa é o número decimal 54616, mas representado como base três". Significa "Leia 54616
como base 3". O que, é claro, você não pode fazer (existem dígitos que a Valve não pode contar lá). Provavelmente ainda seria tão claro se você se livrasse do _3
todo, e mais preciso.