Eccentrics

# Can You Master the Complexity of the Malbolge Computer Language?

When it comes to complicated things, you will be hard-pressed to find anything that is worse than Malbolge. It takes the complexity of computer programming, the nuances of foreign languages, and mixes them together with a generous helping of insanity.

Malbolge was created by Ben Olmstead in 1998. He named the language after the eighth circle of hell in Dante’s Inferno. The name is no mere coincidence. Olmstead intentionally designed it to be virtually impossible to use. It is so complicated, in fact, that Olmstead has never been able to successfully write a program with it.

Malbolge uses base-three arithmetic, self-altering codes, and a counter-intuitive “crazy operation.” Although the creator has not been able to write a program with Malbolge, it is possible to do so. It took two years before the first Malbolge program was written. That was done by a beam search algorithm.

To give you an idea of the complexity of the language, consider the following command to generate the message “Hello, World!” on the computer screen:

(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)”Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:’8dc

Malbolge has eight instructions. Malbolge figures out which instruction to execute by taking the value [c], adding the value of c to it, and taking the remainder when this is divided by 94. The final result tells the interpreter what to do. The eight instructions, are as follows:

After each instruction is executed, the guilty instruction gets encrypted (see below) so that it will not do the same thing next time, unless a jump just happened. Right after a jump, Malbolge will encrypt the innocent instruction just prior to the one it jumped to instead. Then, the values of both c and d are increased by one and the next instruction is executed.

Crazy operation

For each ternary digit of both inputs, use the following table to get a ternary digit of the result. For example, crz 0001112220, 0120120120 gives 1001022211.

After an instruction is executed, the value at [c] (without anything added to it) will be replaced with itself mod 94. Then, the result is enciphered with one of the following two equivalent methods.

Method 1

Find the result below. Store the ASCII code of the character below it at [c].

0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999

0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123

———————————————————————————————-

9m<.TVac`uY*MK’X~xDl}REokN:#?G”i@5z]&gqtyfr\$(we4{WP)H-Zn,[%\3dL+Q;>U!pJS72FhOA1CB6v^=I_0/8|jsb

Method 2

Find the result below. Store the encrypted version at [c].

Lou Scheffer’s cryptanalysis of Malbolge mentions six different cycles in the permutation. They are listed here:

• 33 ⇒ 53 ⇒ 45 ⇒ 119 ⇒ 78 ⇒ 49 ⇒ 87 ⇒ 48 ⇒ 123 ⇒ 71 ⇒ 83 ⇒ 94 ⇒ 57 ⇒ 91 ⇒ 106 ⇒ 77 ⇒ 65 ⇒ 59 ⇒ 92 ⇒ 115 ⇒ 82 ⇒ 118 ⇒ 107 ⇒ 75 ⇒ 104 ⇒ 89 ⇒ 56 ⇒ 44 ⇒ 40 ⇒ 121 ⇒ 35 ⇒ 93 ⇒ 98 ⇒ 84 ⇒ 61 ⇒ 100 ⇒ 97 ⇒ 46 ⇒ 101 ⇒ 99 ⇒ 86 ⇒ 95 ⇒ 109 ⇒ 88 ⇒ 47 ⇒ 52 ⇒ 72 ⇒ 55 ⇒ 110 ⇒ 126 ⇒ 64 ⇒ 81 ⇒ 54 ⇒ 90 ⇒ 124 ⇒ 34 ⇒ 122 ⇒ 63 ⇒ 43 ⇒ 36 ⇒ 38 ⇒ 113 ⇒ 108 ⇒ 39 ⇒ 116 ⇒ 69 ⇒ 112 ⇒ 68 ⇒ 33 …

• 37 ⇒ 103 ⇒ 117 ⇒ 111 ⇒ 120 ⇒ 58 ⇒ 37 …

• 41 ⇒ 102 ⇒ 96 ⇒ 60 ⇒ 51 ⇒ 41 …

• 42 ⇒ 114 ⇒ 125 ⇒ 105 ⇒ 42 …

• 50 ⇒ 80 ⇒ 66 ⇒ 62 ⇒ 76 ⇒ 79 ⇒ 67 ⇒ 85 ⇒ 73 ⇒ 50 …

• 70 ⇒ 74 ⇒ 70 …

These cycles can be used to create loops that do different things each time and that eventually becomes repetitive. Lou Scheffer used this idea to create a Malbolge program (included in his cryptanalysis linked below) that repeats anything the user inputs.

At this point, we freely admit that we were lost after the second paragraph of this article. If you are similarly confused by all of this, take comfort in the knowledge that you are supposed to be lost. If you can figure this out, you will have no trouble with the Pentagon’s 26-page recipe for brownies.