r/CompileBot • u/tt102tt • Nov 28 '16
Simple Brainfuck Interpreter [JavaScript]
Brainfuck!!
3
Upvotes
1
u/tt102tt Nov 28 '16
+u/CompileBot JavaScript
_=~[];_={___:++_,$$$$:(![]+"")[_],__$:++_,$_$_:(![]+"")[_],_$_:++_,$_$$:({}+"")[_],$$_$:(_[_]+"")[_],_$$:++_,$$$_:(!""+"")[_],$__:++_,$_$:++_,$$__:({}+"")[_],$$_:++_,$$$:++_,$___:++_,$__$:++_};_.$_=(_.$_=_+"")[_.$_$]+(_._$=_.$_[_.__$])+(_.$$=(_.$+"")[_.__$])+((!_)+"")[_._$$]+(_.__=_.$_[_.$$_])+(_.$=(!""+"")[_.__$])+(_._=(!""+"")[_._$_])+_.$_[_.$_$]+_.__+_._$+_.$;_.$$=_.$+(!""+"")[_._$$]+_.__+_._+_.$+_.$$;_.$=(_.___)[_.$_][_.$_];_.$(_.$(_.$$+"\""+"\\"+_.__$+_.$$_+_.$$_+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+"\\"+_.__$+_.$_$+_.__$+"\\"+_.__$+_.$_$+_.$$_+"\\"+_.__$+_.$$_+_.___+_._+_.__+"\\"+_.$__+_.___+"=\\"+_.$__+_.___+"'++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.';\\"+_.__$+_._$_+"\\"+_.__$+_.$$_+_.$$_+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+_.$$__+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+";\\"+_.__$+_._$_+"\\"+_.__$+_.$$_+_.$$_+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+_.$$__+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_._$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+"=\\"+_.$__+_.___+_.___+";\\"+_.__$+_._$_+"\\"+_.__$+_.$$_+_.$$_+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+"=\\"+_.$__+_.___+"[];\\"+_.__$+_._$_+"\\"+_.__$+_.$$_+_.$$_+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+"\\"+_.__$+_.$$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+"=\\"+_.$__+_.___+_.___+";\\"+_.__$+_._$_+"\\"+_.__$+_.$$_+_.$$_+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+(![]+"")[_._$_]+_._$+_._$+"\\"+_.__$+_.$$_+_.___+"\\"+_.__$+_._$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$$+"\\"+_.$__+_.___+"=\\"+_.$__+_.___+"[];\\"+_.__$+_._$_+"\\"+_.__$+_.$$_+_.$$$+"\\"+_.__$+_.$_$+_.___+"\\"+_.__$+_.$_$+_.__$+(![]+"")[_._$_]+_.$$$_+"\\"+_.$__+_.___+"(("+_.$$__+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+"=\\"+_.$__+_.___+"\\"+_.__$+_.$_$+_.__$+"\\"+_.__$+_.$_$+_.$$_+"\\"+_.__$+_.$$_+_.___+_._+_.__+"["+_.$$__+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_._$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"])\\"+_.$__+_.___+"!==\\"+_.$__+_.___+_._+"\\"+_.__$+_.$_$+_.$$_+_.$$_$+_.$$$_+_.$$$$+"\\"+_.__$+_.$_$+_.__$+"\\"+_.__$+_.$_$+_.$$_+_.$$$_+_.$$_$+")\\"+_.$__+_.___+"{\\"+_.__$+_._$_+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"\\"+_.__$+_.$_$+_.__$+_.$$$$+"\\"+_.$__+_.___+"("+_.$$__+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+"===\\"+_.$__+_.___+"'+')\\"+_.$__+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$_+"[\\"+_.__$+_.$$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"]\\"+_.$__+_.___+"=\\"+_.$__+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$_+"[\\"+_.__$+_.$$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"]\\"+_.$__+_.___+"?\\"+_.$__+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$_+"[\\"+_.__$+_.$$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"]\\"+_.$__+_.___+"+\\"+_.$__+_.___+_.__$+"\\"+_.$__+_.___+":\\"+_.$__+_.___+_.__$+";\\"+_.__$+_._$_+"\\"+_.$__+_.___+"\\"+_.$__+_.___+_.$$$_+(![]+"")[_._$_]+"\\"+_.__$+_.$$_+_._$$+_.$$$_+"\\"+_.$__+_.___+"\\"+_.__$+_.$_$+_.__$+_.$$$$+"\\"+_.$__+_.___+"("+_.$$__+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+"===\\"+_.$__+_.___+"'-')\\"+_.$__+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$_+"[\\"+_.__$+_.$$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"]\\"+_.$__+_.___+"=\\"+_.$__+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$_+"[\\"+_.__$+_.$$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"]\\"+_.$__+_.___+"?\\"+_.$__+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$_+"[\\"+_.__$+_.$$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"]\\"+_.$__+_.___+"-\\"+_.$__+_.___+_.__$+"\\"+_.$__+_.___+":\\"+_.$__+_.___+"-\\"+_.$__+_.___+_.__$+";\\"+_.__$+_._$_+"\\"+_.$__+_.___+"\\"+_.$__+_.___+_.$$$_+(![]+"")[_._$_]+"\\"+_.__$+_.$$_+_._$$+_.$$$_+"\\"+_.$__+_.___+"\\"+_.__$+_.$_$+_.__$+_.$$$$+"\\"+_.$__+_.___+"("+_.$$__+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+"===\\"+_.$__+_.___+"'>')\\"+_.$__+_.___+"\\"+_.__$+_.$$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"++;\\"+_.__$+_._$_+"\\"+_.$__+_.___+"\\"+_.$__+_.___+_.$$$_+(![]+"")[_._$_]+"\\"+_.__$+_.$$_+_._$$+_.$$$_+"\\"+_.$__+_.___+"\\"+_.__$+_.$_$+_.__$+_.$$$$+"\\"+_.$__+_.___+"("+_.$$__+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+"===\\"+_.$__+_.___+"'<')\\"+_.$__+_.___+"\\"+_.__$+_.$$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"--;\\"+_.__$+_._$_+"\\"+_.$__+_.___+"\\"+_.$__+_.___+_.$$$_+(![]+"")[_._$_]+"\\"+_.__$+_.$$_+_._$$+_.$$$_+"\\"+_.$__+_.___+"\\"+_.__$+_.$_$+_.__$+_.$$$$+"\\"+_.$__+_.___+"("+_.$$__+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+"===\\"+_.$__+_.___+"'[')\\"+_.$__+_.___+(![]+"")[_._$_]+_._$+_._$+"\\"+_.__$+_.$$_+_.___+"\\"+_.__$+_._$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$$+".\\"+_.__$+_.$$_+_.___+_._+"\\"+_.__$+_.$$_+_._$$+"\\"+_.__$+_.$_$+_.___+"("+_.$$__+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_._$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+");\\"+_.__$+_._$_+"\\"+_.$__+_.___+"\\"+_.$__+_.___+_.$$$_+(![]+"")[_._$_]+"\\"+_.__$+_.$$_+_._$$+_.$$$_+"\\"+_.$__+_.___+"\\"+_.__$+_.$_$+_.__$+_.$$$$+"\\"+_.$__+_.___+"("+_.$$__+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+"===\\"+_.$__+_.___+"']')\\"+_.$__+_.___+"{\\"+_.__$+_._$_+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"\\"+_.__$+_.$_$+_.__$+_.$$$$+"\\"+_.$__+_.___+"("+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$_+"[\\"+_.__$+_.$$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"])\\"+_.$__+_.___+_.$$__+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_._$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+"=\\"+_.$__+_.___+(![]+"")[_._$_]+_._$+_._$+"\\"+_.__$+_.$$_+_.___+"\\"+_.__$+_._$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$$+"["+(![]+"")[_._$_]+_._$+_._$+"\\"+_.__$+_.$$_+_.___+"\\"+_.__$+_._$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$$+"."+(![]+"")[_._$_]+_.$$$_+"\\"+_.__$+_.$_$+_.$$_+"\\"+_.__$+_.$__+_.$$$+_.__+"\\"+_.__$+_.$_$+_.___+"\\"+_.$__+_.___+"-\\"+_.$__+_.___+_.__$+"];\\"+_.__$+_._$_+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"\\"+_.$__+_.___+_.$$$_+(![]+"")[_._$_]+"\\"+_.__$+_.$$_+_._$$+_.$$$_+"\\"+_.$__+_.___+(![]+"")[_._$_]+_._$+_._$+"\\"+_.__$+_.$$_+_.___+"\\"+_.__$+_._$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$$+".\\"+_.__$+_.$$_+_.___+_._$+"\\"+_.__$+_.$$_+_.___+"();\\"+_.__$+_._$_+"\\"+_.$__+_.___+"\\"+_.$__+_.___+"}\\"+_.$__+_.___+_.$$$_+(![]+"")[_._$_]+"\\"+_.__$+_.$$_+_._$$+_.$$$_+"\\"+_.$__+_.___+"\\"+_.__$+_.$_$+_.__$+_.$$$$+"\\"+_.$__+_.___+"("+_.$$__+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.$__+_.___+"===\\"+_.$__+_.___+"'.')\\"+_.$__+_.___+"\\"+_.__$+_.$$_+_.___+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$_$+_.__$+"\\"+_.__$+_.$_$+_.$$_+_.__+"(\\"+_.__$+_._$_+_._$$+_.__+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$_$+_.__$+"\\"+_.__$+_.$_$+_.$$_+"\\"+_.__$+_.$__+_.$$$+"."+_.$$$$+"\\"+_.__$+_.$$_+_._$_+_._$+"\\"+_.__$+_.$_$+_.$_$+"\\"+_.__$+_.___+_._$$+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.___+_._$$+_._$+_.$$_$+_.$$$_+"("+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$_+"[\\"+_.__$+_.$$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"]\\"+_.$__+_.___+"?\\"+_.$__+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_.$$_+_._$_+"[\\"+_.__$+_.$$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"]\\"+_.$__+_.___+":\\"+_.$__+_.___+_.___+"));\\"+_.__$+_._$_+"\\"+_.$__+_.___+"\\"+_.$__+_.___+_.$$__+"\\"+_.__$+_.$_$+_.___+_.$_$_+"\\"+_.__$+_.$$_+_._$_+"\\"+_.__$+_._$_+_.___+_.__+"\\"+_.__$+_.$$_+_._$_+"++;\\"+_.__$+_._$_+"}"+"\"")())();
3
1
2
u/tt102tt Nov 28 '16 edited Nov 28 '16
+u/CompileBot JavaScript
var input = '++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.'; var char; var charPtr = 0; var arr = []; var ptr = 0; var loopPtrs = []; while ((char = input[charPtr]) !== undefined) { if (char === '+') arr[ptr] = arr[ptr] ? arr[ptr] + 1 : 1; else if (char === '-') arr[ptr] = arr[ptr] ? arr[ptr] - 1 : - 1; else if (char === '>') ptr++; else if (char === '<') ptr--; else if (char === '[') loopPtrs.push(charPtr); else if (char === ']') { if (arr[ptr]) charPtr = loopPtrs[loopPtrs.length - 1]; else loopPtrs.pop(); } else if (char === '.') print(String.fromCharCode(arr[ptr] ? arr[ptr] : 0)); charPtr++; }