Una delle tante caratteristiche uniche del linguaggio di programmazione Malbolge è il suo OPoperatore altamente non intuitivo , indicato solo come "op" nella documentazione e nel codice sorgente ma popolarmente noto come operatore "pazzo". Come descritto da Ben Olmstead, il creatore della lingua, nella sua documentazione: " non cercare schemi, non è lì ".
op è un operatore "tritwise" - opera sulle cifre ternarie corrispondenti dei suoi due argomenti. Per ogni trit (bit ternario), il risultato di op è dato dalla seguente tabella di ricerca:
a
op(a,b) 0 1 2
+-------
0 | 1 0 0
b 1 | 1 0 2
2 | 2 2 1
Ad esempio, per calcolare op(12345, 54321), prima scrivi entrambi i numeri in ternario e poi cerca ogni coppia di trit nella tabella:
0121221020 (12345_3)
op 2202111220 (54321_3)
--------------
2202220211 (54616_3)
L'ultimo punto importante è che tutti i valori in Malbolge hanno una larghezza di 10 trits, quindi i valori di input devono essere riempiti con zeri per una larghezza di 10. (Ad esempio, op(0, 0)è 1111111111in ternario).
Il tuo compito è prendere due numeri interi 0 ≤ a, b<59049 come input e produrre il valore intero di op(a,b).
Casi di prova (nel formato a b op(a,b)):
0 0 29524
1 2 29525
59048 5 7
36905 2214 0
11355 1131 20650
12345 54321 54616
Ecco un'implementazione di riferimento (copiata direttamente dal codice sorgente di Malbolge).
54616_3non significa "quest'altra cosa è il numero decimale 54616, ma rappresentato come base tre". Significa "Leggi 54616come base 3". Il che, ovviamente, non puoi fare (ci sono cifre sulle quali Valve non può contare). Probabilmente sarebbe ancora altrettanto chiaro se ti liberassi del _3tutto e più accurato.