Obfuscated

From Esolang
Jump to navigation Jump to search

Obfuscated is an esolang created by User:None1 and inspired by Malbolge, its goal is to make you suffer.

Memory model

It has only a wrapping byte register initially set to 0.

Tutorial

To write an Obfuscated program, you first write a program using these commands (case insensitve) separated by line feeds:

Command table
Command Meaning
IN Read a character and store it into the byte register (EOF results in 0)
OUT x Output x as ASCII
OUT * Output the register as ASCII
ADD x Add the register by x
JMP x If register is not 0, jump to line x (the first line is line 0).

For example, you can use this to output A:

OUT 65

Then, pad every line of the program with a space, then with random characters so that every line becomes 30 characters long.

OUT 65 UU-ynhQ dEKY`XKE/BR gK4

Then, convert the resulting program it to base64.

T1VUIDY1IFVVLXluaFEgZEVLWWBYS0UvQlIgZ0s0

Next, encrypt it using this cipher (='s don't change):

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
oIHXLGFkZqcyJhC9/Vi2dgA7W4+65lYMfe8mvOKsExunr0Qa1RSPpDtNTw3BzbjU

In the example, you get:

2DgdZXWDZGggy7OQ+GLf4LgyAAIWipda/OZf4prp

Finally, you get the ASCII code of each character as a 7-bit binary number and convert all 1's to O's.

0OO00O0O000O00OO00OOOOO00O00O0OO0O0O0OO000O0O0OOOO000O00O0OO0O0O000OOOOO00OOOOO00OOOOOOO00O0OO0OOOO00OOOOO0O000O0O0O0OOO000OOOO00OO00OO00OO00OO0O00O00OO00OO00OOOOOOO00OO00000OO00000OO00O00OO0O0OOOOO0O00OOOO0000OO00O00OO0000O0O0OOOOO00OOOOO0OO0O0OO00OO00OO0O00OOO0000OOO00O0OOO0000

That's it! (I did all these in Python because it's obviously very hard to do it by hand.)

Examples

Of cource I did all these in Python.

Hello World

0OO00O0O000O00OO00OOOOO00O00O0OO0O0O0OO0000OO0O0OO0O00OOO0OO0O0O00OO00OO0O000OOO0OOO0OO0O0OO00OOO0OO0O000OO00OO0OOO000OO00O000OOO0OOOO0O000O0OO00O0OOO0000O000OOOO000OOO0OO0O00OOO0000OO00O0OO0O00O0OO0OO00OOO0000OO000O00O0OOOOO0OO0O0OOO0000O00OOOOOO0O0OOO0O0OO0OO00OOOO0OO0O0OO0OO0OO00O000OOO0OO0OO000O0OO00OOOOO00OOOO00O000OO0OOOOO0O00O0O00O0O0O0OO000O00OO00OO00OO0O0000OOOO0O0OOO00O00OOO0OO0OO0OO0O0O00O0000O0OOOOOO0000O0O0OOOOO0O00000OO0O00OO0O00O0OO0O0OO0O00OOO00O00OO0O0OOOOO0O0000OO0OOOO0O0OOOO0O00O0O0O0OO0OO0OO0OOOO0OO0OO00OO0O00O0O0OOO0000OO00O00O0O00O0OO0O00OOO00OO0OOOO0000OOO00OOO00OOOOO00OOO0O0OOOOOO00OO0O00O0O00OO00O0OO0OOOOO0O0O00O0OO0O0O000OOOOO00OO0OO00O0OOOOO00OO000OOOOO0OO000OO0000OO00OOOOO00OOOOOO000OO00O000OOOO00OOOO0O00O00OO00OO00OO0O0O0OO0OOO00OOOO0O000OOOO000O0000OOOO00O00OO00OO0O0O00OO0OO0O00OOO00OOOO0O000O0O0000O0000OOO00OO00O0O0OOOOO000OO0OO00O0O000O00OO00OOOOO00O00O0OO0O0O0OO000O00OO000OO000OO0000OOO00O000O00O00OOO0O0000O0O0OOOO00O00OOOO0000O0O0OOO00000O0OO0OOOO00O0O0O0O0000OO00O00O00OO00O00OOOOO0OO000O0OO0O0O000OOOOOO000OOOO0O0OOO0O00OOOO0OO0OO00OOO0OO00OOOO0OO000OO0OOOOO0OO00OO0OOO00OO0O00O0OO000OOO000OOOO0000O00O000OOO0OO0OO000O0OO00OOOOO00OOOO00O000OO0OOOOO0O00O0O00O0O00OO00O0O00OO00OO00OO00OO0OO0OOO00OOOOO0OO0OOO0OOO0OO0O00OO00O00OO00O0OOO0OO0O0OO0O0OO00000OO0O0OO0OO0OOO0OO0O00OO00OOOOO00OOOOOO0O00O0O0O0OOOOO0000OOOO000O0O00OO0O0O0OOO000OO0O0O0O00OO0OOO0O0O0OO0OOO0000OOO000OOO0OOO0O00000OOO00OO0OOOO0000OOO00OOO00OOOOO00OOO0O0OOOOOO00OO0O00O0O0O0O0000O0OO0O0OO00OO0O0OO0O0O000OOOO0O0OO0O000OO00O0O0OOO000OOOOO00OO0O0O0000O0O0OOOOOO0OO0O0O0OOOO0O0000O00000OOO0O0OOOO0OO000OO00OOOO0O000OO00OOOOO00OO0OOO00O0O0OO0O0O000OO00OO0000OO00OOOO0O0OOO0OO0OOO0O0OOOOOO0OOO0O0OO0O0O00OO00OO00O00OO000OO0OO00O0O000O00OO00OOOOO00O00O0OO0O0O0OO000OO00OO0O00OOO0O0OO0O0O00OO00OO00OOOOOO0OO00OO0O0OO000O00O00O00OOO00O0O0OO00O0O0OO0000OO0000OO000OOO0000OOOOO0000O000OOOO000OOO0OO00O0O00000OO0OO0O0OO0000OOO00OOOO000OO0O0OO0O0O0O000OO0000OOO00O000O00O00O0O0O0OOOO0O00OOOO00OOOO00OOOO000O00O00O000OOO0OO0OO000O0OO00OOOOO00OOOO00O000OO0OOOOO0O00O0O00O0O00OO00O0O00OO00OO00OO00OO0O0OO000OO0OO0OO00O00O00O0OO0OO0O00O0OO0OO0O000OOO00O0OO0OO0OOO0000O000O0OO0000O0OO0OO00O00OOOOO00O00OOO00OOOOO0OO000OO00O0O00O00OO00O00O0OO0OO0O0O00OOO00O0O0O0000O00OO0O0OO000OOO0OO0O00O0OO000O0O0OO0OO00OO0OOOO0000OOO00OOO00OOOOO00OOO0O0OOOOOO00OO0O00O0O00OO00O0O00OO00OOO0000O0OO0O0O00OO00OO00OOOOOOO000OO000OOO00OOO0O0O0OO0OO00O00OO00OOOOOO0O000OO0000OOO00O0OO0O00OOO0O0OO0OO0O00OOOO000O0OO00OO00000OO00OO00O0O0O00O0O0OO0O00OOO0O00OO00O0O0O00OO0O000OOO0O00O0O0OO0OO0O000O0OO00OOOO00OOO0OO0O0OO000OO0OO00O0O000O00OO00OOOOO00O00O0OO0O0O0OO000O00OO000OO000OO0000OOO00O000O00O00OO000O0O0O0O0OOO00O0OOOOO00O0O00OOO00OO00O0O000OOOOO0OO000OOO00O0OO0O0OO000OOOOO0OOOOOOO0OOOOO00O00O00O0OOOO0OO00OOO0000OO000OO0OOO0000OO0000O0O0O00O0O0OOO0OOO000OOOO0000O0O0OOO0OO0O0O000OO0OO000O0O0O0OO0O00O000OOO0OO0OO000O0OO00OOOOO00OOOO00O000OO0OOOOO0O00O0O00O0O0O0OO000OO0OOOOOO00OO0OO000OOOOO0000OOO0000O0O00O0O0000OOO000OO00O0OOOOOO00OO00O0O0OOO00OO00O000OOOOOO0O0OO0OO0O0O000OOOO00OOOOOOO0OO0O0O0OOOO000O00OO0OOOOO0O00000OO0OO0OOO0000OOO00O0O0O0O00OO0OO00O00O0OO0OO0O0OOO00OO0O0OO0O0OO0OOOOOOOO0000OOO00OOO00OOOOO00OOO0O0OOOOOO00OO0O00O0O0O0O0000O00O0O0OO00OO0OO00OOOOO00O00OOO0OOOO00000OO0000OOO00000O0OO0O00O00O00OOOO000OO000OOOO00OOOOOOO0O0OOO0O00OOO0O00OO0O00O0OO00O000OO0O00O00000O0OO000OO0O0000OO0O00OO00000OOO00O0O0OOO00O0OO0O0OO000OOOO00O00OO0000OOOO000OOO00O0OOOOO00O00OOOO0O

Cat program

OO0O00OOO00O00O0O0O00OO00OO0OOO000OO00O000O00O00O0OO0000OO0O000OO00O00OO00O0OO0O000OO0OO0O0O00OO00OOOO0O0OO00O0OO0OO0O0O0OO000OO00O0OO0O00O0O0OO0O0O00OO00O000OOOOOO00OOOO0O000O00OO00OO000O0O00O0O00OO0OO0O00OOOO0O0OOOOO0O000O0O0O0OOO000OO0O0O00O0OO00O0OO00O0O0O00O000O0O00O0O0OO0O0O00O000OOO0OO0OO000O0OO00OOOOO00OOOO00O000OO0OOOOOOO0O0OO0OO0O0O000OOOOOO000OO00000OOO0OO00O00O0OOOO00OOO0OOO000OO0O00O0OOO000O00O00OOOO0OO0OO00O00OO00O00O00O0O0OO00O0OOO0O000O0O0000O00O00O0OO0OOOOO0OO00O00000OOOO0OOOO00O0O00O0OOOOO00000OO000OOO0OO00OOOO0O000O0O00OOOO000O00OO0O000OO0O00OO00OO0OOOO000OO000OO0OO00O0OO00OOOOO0OOOOOO00OO0O00O0O0O00O000O00O00O0O0OOOOO0000OOO000OOO0OO0O0OOO0OOO0O00O0O00OO00O0O0OO0O0O00OOO0OO0O000O000OOOOOO000OOO0O00OOO00OOOOOO0O00OO00O000OO0000O00000OOOO0OO0O00O0O0O00OOO00OO0OO0O0OO000OO00OOOO0OO0O00OO0O00O0O00OOOOO0OOOO00O0O0O0O0OOOO0O00000OO0O0O0OOOO0O

Truth Machine

OO0O00OOO00O00O0O0O00OO00OO00O0O0OOOOO0000O0O0OO0O000O0OO0O0OO0O0O0000OO00O00OO00O0OO0OO00OOO00OOO0OO0O000OOO00OO0OO0O0O00O000O00O00OOOO00O0OO00O00O00O0OOOOO000OO0O00OO0OO0O0OO0O00OOO0O0O00O000O00O0000OOO000OO0OOO000OO00OO00O00O0O0O0OO000OO0OO00O000OO0O0OO00OOO0OO0OO00OOOOO00000OO00O000OOO0OO0O000OOOO00OO00O0O0OO0O00O000OO0OOOOO0O00OOO00O0O0O0OO000OO00OO0OO00OO0O0000OOOOO0O00OOO000O0O0OOOOOO0O00OOO00O000OO0000O000OOOOO0O000O0OO0000OO0O00OO00O0OOO00OOOO000O000OO0O00OO0O000O0OO00OO0OO000OO0O0000O0O0OOOO00OOOO00OOO0O0O0OO0O00OO00OO00OOOO00OOOOOO0OOOOOOO0OO0OO00O00OO00OO0OOOO000O00O00OO0O0OO0O00OO000O0OOOOOO00OO0OO0O000O0OO000OO00OO0OO00OO0OO000OOO00OOO00O0OOOO0OO000OO0O0OO0O00O000O000OOO0OO00O0O00000OO00O000OO0O000O0O0O00OO0O00OO000O00O00OOOOO000O0OOO00OOOO00O000O0O0OO0OO0OO0OO0OO0O0O00O000OO000O0O0000OOOO0O00OO00O000O00O00OOOO0OO0OO00OOOOO0OO0OOO0OOOOOO000OO0OO00O0O000O00OO00OOOOO00O00O0OO0O0O00O000O000O0OOO00OO0OO0OO00OO00O000O0OOOOO0O00O0O00O0O0O0OO000OO00OO00OO00000O0O0OOO000OO0OO0OOOOOO00OO0OO0O000OOO00OOOOO000OOO0000OO0OO0O0O00OO00O00OOOO0OOO00O0OO00O0O0O00000OO0000OOO0OO0OO0O00O0OO0OOOOOOO000OOO00OOO00000OOO0O00OO0O00O0O0OO0O0O00O000OOO0OO0O000OOOO00OO00O0O0OO0O00O000OO0OOOOO0O00OOO00O0O0O0OO000OO00OO0OO00OO0O00000OO00OOOOOO0OO000OOO000OO00O00O00000OOO00O00O000O00O00O0O0O00OOOOO00O00OOO000OOO0O0OO0O00OOOOO000OOO0O0O0OOOO00OOO0OOO0000O0OOOO0OO000OOOO000OO000OO0O0O00O0OO0OO0OO0O0OO00OO0OOOO00O00O0OO00000O0OOOO0O0OOOOOOOO000OO000OO0OO00O0OO00OOOOO0OOOOOO00OO0O00O0O00OOO000OO0OOOOOO00OO00OO0OO0O0O00OOO000O0OO0O0000O0O0OO0OOO0000OO00O0OO0O00000OO0O0OO000O00OO00OOOOO00O0O0OO0OO0O0OO0000OO0000O00O0OOOO0O00OOOO0O00OO00OO00OO0000OO00OOOOO0O00OO00O00OO0O00OOOO0O000OOO0000OO00OOOOOO0O00O00000OO0OO0000OO0O0O0OOOO0O

Interpreters

The following is an obfuscated Obfuscated interpreter written in JavaScript. It takes an Obfuscated program and the input to the program as its arguments.

function run(c,e){var s=SyntaxError("Invalid syntax"),C="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",D="oIHXLGFkZqcyJhC9/Vi2dgA7W4+65lYMfe8mvOKsExunr0Qa1RSPpDtNTw3BzbjU=";if(c.length%7||c.replace(/O|0/g,""))throw s;let m=c.replace(/O/g,"1").match(/.{7}/g).map(x=>C[D.indexOf(String.fromCharCode(parseInt(x,2)))]),L=atob(m.join``).split("\n"),l,i=0,R,o=f=>(f=='\n'?(console.log(X),X=""):(X+=f)),X="",E=e.split``;for(l of L)if(l.length-30||!/^(IN|OUT \*|(OUT|ADD|JMP) [0-9]+) /i.test(l))throw s;for(;i<L.length;){l=L[i].toLowerCase();l[0]=="I"&&(R=(E.splice(0,1)[0]||"\0").charCodeAt(0));/^OUT [0-9]+ /.test(l)&&(o(String.fromCharCode(parseInt(l.slice(4)))),1)||l[0]=="O"&&o(String.fromCharCode(R));l[0]=="A"&&(R+=parseInt(l.slice(4)),R&=255);i=(l[0]=="J"&&R)?parseInt(l.slice(4)):i+1;}o("\n");}

Note that the above interpreter will not print anything if 1 is input to the Truth-machine program, since the program does not terminate and no newline is ever output. The following Node.js interpreter does not have this limitation:

function run(c,e){var s=SyntaxError("Invalid syntax"),C="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",D="oIHXLGFkZqcyJhC9/Vi2dgA7W4+65lYMfe8mvOKsExunr0Qa1RSPpDtNTw3BzbjU=";if(c.length%7||c.replace(/O|0/g,""))throw s;let m=c.replace(/O/g,"1").match(/.{7}/g).map(x=>C[D.indexOf(String.fromCharCode(parseInt(x,2)))]),L=atob(m.join``).split("\n"),l,i=0,R,o=f=>process.stdout.write(f),E=e.split``;for(l of L)if(l.length-30||!/^(IN|OUT \*|(OUT|ADD|JMP) [0-9]+) /i.test(l))throw s;for(;i<L.length;){l=L[i].toLowerCase();l[0]=="I"&&(R=(E.splice(0,1)[0]||"\0").charCodeAt(0));/^OUT [0-9]+ /.test(l)&&(o(String.fromCharCode(parseInt(l.slice(4)))),1)||l[0]=="O"&&o(String.fromCharCode(R));l[0]=="A"&&(R+=parseInt(l.slice(4)),R&=255);i=(l[0]=="J"&&R)?parseInt(l.slice(4)):i+1;}}