#include <iostream>
void bf_run(char const* codeptr, unsigned char* memptr)
{
while(*codeptr)
{
switch(*codeptr)
{
case '.':
std::cout << static_cast<char>(*memptr);
break;
case ',':
std::cin.read(reinterpret_cast<char*>(memptr), 1);
break;
case '>':
++memptr;
break;
case '<':
--memptr;
break;
case '+':
++*memptr;
break;
case '-':
--*memptr;
break;
case '[':
++codeptr;
while(*memptr)
bf_run(codeptr, memptr);
while(*codeptr && *codeptr != ']')
++codeptr;
break;
case ']':
return;
default:
break;
}
++codeptr;
}
}
int main()
{
char const source[] =
"++++++++++"
"["
">+++++++>++++++++++>+++>+<<<<-"
"]"
">++."
">+."
"+++++++."
"."
"+++."
">++."
"<<+++++++++++++++."
">."
"+++."
"------."
"--------."
">+."
">."
"+++.";
unsigned char memory[1024] = {};
bf_run(source, memory);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdm9pZCBiZl9ydW4oY2hhciBjb25zdCogY29kZXB0ciwgdW5zaWduZWQgY2hhciogbWVtcHRyKQp7Cgl3aGlsZSgqY29kZXB0cikKCXsKCQlzd2l0Y2goKmNvZGVwdHIpCgkJewoJCWNhc2UgJy4nOgoJCQlzdGQ6OmNvdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oKm1lbXB0cik7CgkJCWJyZWFrOwoKCQljYXNlICcsJzoKCQkJc3RkOjpjaW4ucmVhZChyZWludGVycHJldF9jYXN0PGNoYXIqPihtZW1wdHIpLCAxKTsKCQkJYnJlYWs7CgoJCWNhc2UgJz4nOgoJCQkrK21lbXB0cjsKCQkJYnJlYWs7CgoJCWNhc2UgJzwnOgoJCQktLW1lbXB0cjsKCQkJYnJlYWs7CgoJCWNhc2UgJysnOgoJCQkrKyptZW1wdHI7CgkJCWJyZWFrOwoKCQljYXNlICctJzoKCQkJLS0qbWVtcHRyOwoJCQlicmVhazsKCgkJY2FzZSAnWyc6CgkJCSsrY29kZXB0cjsKCgkJCXdoaWxlKCptZW1wdHIpCgkJCQliZl9ydW4oY29kZXB0ciwgbWVtcHRyKTsKCgkJCXdoaWxlKCpjb2RlcHRyICYmICpjb2RlcHRyICE9ICddJykKCQkJCSsrY29kZXB0cjsKCgkJCWJyZWFrOwoKCQljYXNlICddJzoKCQkJcmV0dXJuOwoKCQlkZWZhdWx0OgoJCQlicmVhazsKCQl9CgoJCSsrY29kZXB0cjsKCX0KfQoKaW50IG1haW4oKQp7CgljaGFyIGNvbnN0IHNvdXJjZVtdID0KCSIrKysrKysrKysrIgoJIlsiCgkiPisrKysrKys+KysrKysrKysrKz4rKys+Kzw8PDwtIgoJIl0iCgkiPisrLiIKCSI+Ky4iCgkiKysrKysrKy4iCgkiLiIKCSIrKysuIgoJIj4rKy4iCgkiPDwrKysrKysrKysrKysrKysuIgoJIj4uIgoJIisrKy4iCgkiLS0tLS0tLiIKCSItLS0tLS0tLS4iCgkiPisuIgoJIj4uIgoJIisrKy4iOwoKCXVuc2lnbmVkIGNoYXIgbWVtb3J5WzEwMjRdID0ge307CgoJYmZfcnVuKHNvdXJjZSwgbWVtb3J5KTsKfQ==