#include <stdlib.h>
#include <stdio.h>
#include <string.h>
unsigned char data[1024] = {0};
unsigned char * data_ptr = data;
char input[1024] = {0};
char * input_ptr = input;
char output[1024] = {0};
char * output_ptr = output;
size_t run(char * code, size_t code_len, size_t code_pos, int deep)
{
size_t i, begin, end;
for(i = code_pos; i < code_len; i++)
{
switch(code[i])
{
case '+': (*data_ptr)++; break;
case '-': (*data_ptr)--; break;
case '>': data_ptr++; break;
case '<': data_ptr--; break;
case ',': *data_ptr = *input_ptr; input_ptr++; break;
case '.': *output_ptr = *data_ptr; output_ptr++; break;
case ']': return i;
case '[':
begin = i;
while(*data_ptr)
{
code_pos = begin + 1;
end = run(code, code_len, code_pos, deep + 1);
}
i = end;
break;
}
if(deep && i == code_len - 1)
}
return 0;
}
char * brain_luck(char * code, char * _input)
{
printf("Input: '%s'\n", input
); run
(code
, strlen(code
), 0, 0); printf("\nOutput: '%s'\n", output
);
return result;
}
int main()
{
brain_luck(",[.[-],]", "test");
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdW5zaWduZWQgY2hhciBkYXRhWzEwMjRdID0gezB9Owp1bnNpZ25lZCBjaGFyICogZGF0YV9wdHIgPSBkYXRhOwoKY2hhciBpbnB1dFsxMDI0XSA9IHswfTsKY2hhciAqIGlucHV0X3B0ciA9IGlucHV0OwoKY2hhciBvdXRwdXRbMTAyNF0gPSB7MH07CmNoYXIgKiBvdXRwdXRfcHRyID0gb3V0cHV0OwoKc2l6ZV90IHJ1bihjaGFyICogY29kZSwgc2l6ZV90IGNvZGVfbGVuLCBzaXplX3QgY29kZV9wb3MsIGludCBkZWVwKQp7CiAgIHNpemVfdCBpLCBiZWdpbiwgZW5kOwogICBmb3IoaSA9IGNvZGVfcG9zOyBpIDwgY29kZV9sZW47IGkrKykKICAgewogICAgICBzd2l0Y2goY29kZVtpXSkKICAgICAgewogICAgICAgICBjYXNlICcrJzogKCpkYXRhX3B0cikrKzsgYnJlYWs7CiAgICAgICAgIGNhc2UgJy0nOiAoKmRhdGFfcHRyKS0tOyBicmVhazsKICAgICAgICAgY2FzZSAnPic6IGRhdGFfcHRyKys7IGJyZWFrOwogICAgICAgICBjYXNlICc8JzogZGF0YV9wdHItLTsgYnJlYWs7CiAgICAgICAgIGNhc2UgJywnOiAqZGF0YV9wdHIgPSAqaW5wdXRfcHRyOyBpbnB1dF9wdHIrKzsgYnJlYWs7CiAgICAgICAgIGNhc2UgJy4nOiAqb3V0cHV0X3B0ciA9ICpkYXRhX3B0cjsgb3V0cHV0X3B0cisrOyBicmVhazsKICAgICAgICAgY2FzZSAnXSc6IHJldHVybiBpOwogICAgICAgICBjYXNlICdbJzoKICAgICAgICAgICAgYmVnaW4gPSBpOwogICAgICAgICAgICB3aGlsZSgqZGF0YV9wdHIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY29kZV9wb3MgPSBiZWdpbiArIDE7CiAgICAgICAgICAgICAgIGVuZCA9IHJ1bihjb2RlLCBjb2RlX2xlbiwgY29kZV9wb3MsIGRlZXAgKyAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpID0gZW5kOwogICAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZihkZWVwICYmIGkgPT0gY29kZV9sZW4gLSAxKQogICAgICAgICBhYm9ydCgpOwogICB9CgogICByZXR1cm4gMDsKfQoKY2hhciAqIGJyYWluX2x1Y2soY2hhciAqIGNvZGUsIGNoYXIgKiBfaW5wdXQpCnsKICAgc3RyY3B5KGlucHV0LCBfaW5wdXQpOwoKICAgcHJpbnRmKCJDb2RlOiAnJXMnXG4iLCBjb2RlKTsKICAgcHJpbnRmKCJJbnB1dDogJyVzJ1xuIiwgaW5wdXQpOwogICBydW4oY29kZSwgc3RybGVuKGNvZGUpLCAwLCAwKTsKICAgcHJpbnRmKCJcbk91dHB1dDogJyVzJ1xuIiwgb3V0cHV0KTsKICAgCiAgIGNoYXIgKiByZXN1bHQgPSAoY2hhciAqKW1hbGxvYyhzdHJsZW4ob3V0cHV0KSk7CiAgIHN0cmNweShyZXN1bHQsIG91dHB1dCk7CiAgIHJldHVybiByZXN1bHQ7Cn0KCmludCBtYWluKCkKewogICBicmFpbl9sdWNrKCIsWy5bLV0sXSIsICJ0ZXN0Iik7Cn0K