Eines der vielen einzigartigen Merkmale der Programmiersprache Malbolge ist der äußerst unintuitive OP
Operator, der in der Dokumentation und im Quellcode nur als "op" bezeichnet wird, im Volksmund aber als "crazy" -Operator bezeichnet wird. Wie von Ben Olmstead, dem Schöpfer der Sprache, in seiner Dokumentation beschrieben: " Suche kein Muster, es ist nicht da ."
op ist ein "tritweiser" Operator - er bearbeitet die entsprechenden ternären Ziffern seiner beiden Argumente. Für jedes Trit (ternäres Bit) ergibt sich das Ergebnis von op aus der folgenden Nachschlagetabelle:
a
op(a,b) 0 1 2
+-------
0 | 1 0 0
b 1 | 1 0 2
2 | 2 2 1
Um beispielsweise zu berechnen op(12345, 54321)
, schreiben Sie zuerst beide Zahlen ternär aus und schlagen dann jedes Paar von Trits in der Tabelle nach:
0121221020 (12345_3)
op 2202111220 (54321_3)
--------------
2202220211 (54616_3)
Der letzte wichtige Punkt ist , dass alle Werte in Malbolge sind Trits 10 breit, so dass Eingangswerte sollten mit Nullen bis zu einer Breite von 10 aufgefüllt werden (beispielsweise op(0, 0)
ist 1111111111
in ternären.)
Ihre Aufgabe ist es, zwei Ganzzahlen 0 ≤ a
, b
<59049 als Eingabe zu verwenden und den Ganzzahlwert von auszugeben op(a,b)
.
Testfälle (im Format a b op(a,b)
):
0 0 29524
1 2 29525
59048 5 7
36905 2214 0
11355 1131 20650
12345 54321 54616
Hier ist eine Referenzimplementierung (direkt aus dem Malbolge-Quellcode kopiert).
54616_3
heißt das nicht "dieses andere Ding ist die Dezimalzahl 54616, sondern als Basis drei dargestellt". Es bedeutet "Read 54616
as base 3". Was Sie natürlich nicht können (es gibt Ziffern, auf die Valve nicht zählen kann). Es wäre wahrscheinlich immer noch genauso klar, wenn Sie sich des _3
Ganzen und Genaueren entledigen würden .