#include <stdlib.h>
#include <stdio.h>
#include <string.h>
size_t run(char * code,
size_t code_len,
size_t code_pos,
unsigned char ** data_ptr,
char ** input_ptr,
char ** output_ptr,
int depth)
{
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, data_ptr, input_ptr, output_ptr, depth + 1);
}
i = end;
break;
}
}
return 0;
}
char * brain_luck(char * code, char * input)
{
unsigned char * data
= (unsigned char *)malloc(1024);
char * output
= (char *)malloc(1024);
unsigned char * data_ptr = data;
char * input_ptr = input;
char * output_ptr = output;
printf("Input: '%s'\n", input
); run
(code
, strlen(code
), 0, &data_ptr
, &input_ptr
, &output_ptr
, 0); printf("Output: '%s'\n", output
);
return output;
}
int main()
{
char *r1 =brain_luck(",[.[-],]", "test");
printf("Result1: '%s'\n\n", r1
);
char *r2 =brain_luck("++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", "not used");
printf("Result2: '%s'\n\n", r2
);
char *r3 =brain_luck(",[.[-],]", "test");
printf("Result3:' %s'\n\n", r3
);
char *r4 =brain_luck(",+[-.,+]", "huita");
printf("Result4: '%s'\n\n", r1
); }
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKc2l6ZV90IHJ1bihjaGFyICogY29kZSwKICAgICAgICAgICBzaXplX3QgY29kZV9sZW4sCiAgICAgICAgICAgc2l6ZV90IGNvZGVfcG9zLAogICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiogZGF0YV9wdHIsCiAgICAgICAgICAgY2hhciAqKiBpbnB1dF9wdHIsCiAgICAgICAgICAgY2hhciAqKiBvdXRwdXRfcHRyLAogICAgICAgICAgIGludCBkZXB0aCkKewogICBzaXplX3QgaSwgYmVnaW4sIGVuZDsKICAgZm9yKGkgPSBjb2RlX3BvczsgaSA8IGNvZGVfbGVuOyBpKyspCiAgIHsKICAgICAgc3dpdGNoKGNvZGVbaV0pCiAgICAgIHsKICAgICAgICAgY2FzZSAnKyc6ICgqKmRhdGFfcHRyKSsrOyBicmVhazsKICAgICAgICAgY2FzZSAnLSc6ICgqKmRhdGFfcHRyKS0tOyBicmVhazsKICAgICAgICAgY2FzZSAnPic6ICgqZGF0YV9wdHIpKys7IGJyZWFrOwogICAgICAgICBjYXNlICc8JzogKCpkYXRhX3B0ciktLTsgYnJlYWs7CiAgICAgICAgIGNhc2UgJywnOiAqKmRhdGFfcHRyID0gKippbnB1dF9wdHI7ICgqaW5wdXRfcHRyKSsrOyBicmVhazsKICAgICAgICAgY2FzZSAnLic6ICoqb3V0cHV0X3B0ciA9ICoqZGF0YV9wdHI7ICgqb3V0cHV0X3B0cikrKzsgYnJlYWs7CiAgICAgICAgIGNhc2UgJ10nOiByZXR1cm4gaTsKICAgICAgICAgY2FzZSAnWyc6CiAgICAgICAgICAgIGJlZ2luID0gaTsKICAgICAgICAgICAgd2hpbGUoKipkYXRhX3B0cikKICAgICAgICAgICAgewogICAgICAgICAgICAgICBjb2RlX3BvcyA9IGJlZ2luICsgMTsKICAgICAgICAgICAgICAgZW5kID0gcnVuKGNvZGUsIGNvZGVfbGVuLCBjb2RlX3BvcywgZGF0YV9wdHIsIGlucHV0X3B0ciwgb3V0cHV0X3B0ciwgZGVwdGggKyAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpID0gZW5kOwogICAgICAgICAgICBicmVhazsKICAgICAgfQogICB9CgogICByZXR1cm4gMDsKfQoKY2hhciAqIGJyYWluX2x1Y2soY2hhciAqIGNvZGUsIGNoYXIgKiBpbnB1dCkKewogICB1bnNpZ25lZCBjaGFyICogZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKDEwMjQpOwogICBtZW1zZXQoZGF0YSwgJ1wwJywgMTAyNCk7CiAgIAogICBjaGFyICogb3V0cHV0ID0gKGNoYXIgKiltYWxsb2MoMTAyNCk7CiAgIG1lbXNldChvdXRwdXQsICdcMCcsIDEwMjQpOwoJCiAgIHVuc2lnbmVkIGNoYXIgKiBkYXRhX3B0ciA9IGRhdGE7CiAgIGNoYXIgKiBpbnB1dF9wdHIgPSBpbnB1dDsKICAgY2hhciAqIG91dHB1dF9wdHIgPSBvdXRwdXQ7CgkKICAgcHJpbnRmKCJDb2RlOiAnJXMnXG4iLCBjb2RlKTsKICAgcHJpbnRmKCJJbnB1dDogJyVzJ1xuIiwgaW5wdXQpOwogICBydW4oY29kZSwgc3RybGVuKGNvZGUpLCAwLCAmZGF0YV9wdHIsICZpbnB1dF9wdHIsICZvdXRwdXRfcHRyLCAwKTsKICAgcHJpbnRmKCJPdXRwdXQ6ICclcydcbiIsIG91dHB1dCk7CiAgIAogICBmcmVlKGRhdGEpOwogICAKICAgcmV0dXJuIG91dHB1dDsKfQoKaW50IG1haW4oKQp7CiAgIGNoYXIgKnIxID1icmFpbl9sdWNrKCIsWy5bLV0sXSIsICJ0ZXN0Iik7CiAgIHByaW50ZigiUmVzdWx0MTogJyVzJ1xuXG4iLCByMSk7CiAgIGZyZWUocjEpOwogICAKICAgY2hhciAqcjIgPWJyYWluX2x1Y2soIisrKysrKysrKytbPisrKysrKys+KysrKysrKysrKz4rKys+Kzw8PDwtXT4rKy4+Ky4rKysrKysrLi4rKysuPisrLjw8KysrKysrKysrKysrKysrLj4uKysrLi0tLS0tLS4tLS0tLS0tLS4+Ky4+LiIsICJub3QgdXNlZCIpOwogICBwcmludGYoIlJlc3VsdDI6ICclcydcblxuIiwgcjIpOwogICBmcmVlKHIyKTsKICAgCiAgIGNoYXIgKnIzID1icmFpbl9sdWNrKCIsWy5bLV0sXSIsICJ0ZXN0Iik7CiAgIHByaW50ZigiUmVzdWx0MzonICVzJ1xuXG4iLCByMyk7CiAgIGZyZWUocjMpOwogICAKICAgY2hhciAqcjQgPWJyYWluX2x1Y2soIiwrWy0uLCtdIiwgImh1aXRhIik7CiAgIHByaW50ZigiUmVzdWx0NDogJyVzJ1xuXG4iLCByMSk7CiAgIGZyZWUocjQpOwp9Cg==