Jedną z wielu unikalnych cech języka programowania Malbolge jest jego wysoce nieintuicyjny OP
operator, określany tylko jako „op” w dokumentacji i kodzie źródłowym, ale popularnie znany jako „zwariowany” operator. Jak opisuje Ben Olmstead, twórca języka, w swojej dokumentacji: „ nie szukaj wzoru, nie ma go ”.
op jest operatorem „trójstronnym” - działa na odpowiednich cyfrach trójskładnikowych dwóch argumentów. Dla każdego trytu (bitu trójskładnikowego) wynik operacji jest podawany przez następującą tabelę wyszukiwania:
a
op(a,b) 0 1 2
+-------
0 | 1 0 0
b 1 | 1 0 2
2 | 2 2 1
Na przykład, aby obliczyć op(12345, 54321)
, najpierw wypisz obie liczby w trójce, a następnie sprawdź każdą parę tritów w tabeli:
0121221020 (12345_3)
op 2202111220 (54321_3)
--------------
2202220211 (54616_3)
Ostatnim ważnym punktem jest to, że wszystkie wartości w Malbolge mają szerokość 10 tritów, więc wartości wejściowe należy uzupełnić zerami do szerokości 10. (Na przykład op(0, 0)
jest 1111111111
trójskładnikowy).
Twoim zadaniem jest przyjęcie dwóch liczb całkowitych 0 ≤ a
, b
<59049 jako wartości wejściowej i wyprowadzenie wartości całkowitej op(a,b)
.
Przypadki testowe (w formacie a b op(a,b)
):
0 0 29524
1 2 29525
59048 5 7
36905 2214 0
11355 1131 20650
12345 54321 54616
Oto implementacja referencyjna (skopiowana bezpośrednio z kodu źródłowego Malbolge).
54616_3
nie oznacza „ta druga rzecz to liczba dziesiętna 54616, ale reprezentowana jako podstawa trzy”. Oznacza to „Odczytaj 54616
jako podstawę 3”. Czego oczywiście nie możesz zrobić (są tam cyfry, których Valve nie może policzyć). Prawdopodobnie byłoby tak samo jasne, jeśli pozbyłeś się _3
całkowicie i dokładniej.