L'une des nombreuses caractéristiques uniques du langage de programmation Malbolge est son OP
opérateur extrêmement peu intuitif , désigné uniquement par "op" dans la documentation et le code source, mais communément appelé l'opérateur "fou". Comme le décrit Ben Olmstead, le créateur du langage, dans sa documentation: " ne cherchez pas de motif, il n'y est pas ".
op est un opérateur "tritwise" - il opère sur les chiffres ternaires correspondants de ses deux arguments. Pour chaque trit (bit ternaire), le résultat de op est donné par la table de consultation suivante:
a
op(a,b) 0 1 2
+-------
0 | 1 0 0
b 1 | 1 0 2
2 | 2 2 1
Par exemple, pour calculer op(12345, 54321)
, écrivez d'abord les deux nombres en ternaire, puis recherchez chaque paire d'erreurs dans le tableau:
0121221020 (12345_3)
op 2202111220 (54321_3)
--------------
2202220211 (54616_3)
Le dernier point important est que toutes les valeurs dans Malbolge ont une largeur de 10 passages. Par conséquent, les valeurs en entrée doivent être complétées avec des zéros jusqu'à une largeur de 10. (Par exemple, elle op(0, 0)
est 1111111111
en ternaire.)
Votre tâche consiste à prendre deux nombres entiers 0 ≤ a
, b
<59049 en entrée et à afficher la valeur entière de op(a,b)
.
Cas de test (dans le format a b op(a,b)
):
0 0 29524
1 2 29525
59048 5 7
36905 2214 0
11355 1131 20650
12345 54321 54616
Voici une implémentation de référence (copiée directement du code source de Malbolge).
54616_3
ne signifie pas "cette autre chose est le nombre décimal 54616, mais représenté en base trois". Cela signifie "lire 54616
en base 3". Ce que vous ne pouvez bien sûr pas faire (il y a des chiffres que Valve ne peut pas compter). Il serait probablement toujours aussi clair si vous vous en débarrassiez _3
entièrement et de manière plus précise.