#include <stdlib.h>
#include <stdio.h>
#include <string.h>
unsigned char data[1024] = {0};
unsigned char * data_ptr = data;
char input[1024] = {0};
char output[1024] = {0};
char * output_ptr = output;
// input_ptr теперь параметр
size_t run(char * code, size_t code_len, size_t code_pos, char * input_ptr, 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;
// Измненеие input_ptr
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;
// Рекурсивный вызов run()
end = run(code, code_len, code_pos, input_ptr, deep + 1);
}
i = end;
break;
}
if(deep && i == code_len - 1)
}
return 0;
}
char * brain_luck(char * code, char * _input)
{
// Новое объявление input_ptr
char * input_ptr = input;
printf("Input: '%s'\n", input
); // Вызов run()
run
(code
, strlen(code
), 0, input_ptr
, 0); printf("\nOutput: '%s'\n", output
);
return result;
}
int main()
{
brain_luck(",[.[-],]", "test");
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdW5zaWduZWQgY2hhciBkYXRhWzEwMjRdID0gezB9Owp1bnNpZ25lZCBjaGFyICogZGF0YV9wdHIgPSBkYXRhOwoKY2hhciBpbnB1dFsxMDI0XSA9IHswfTsKCmNoYXIgb3V0cHV0WzEwMjRdID0gezB9OwpjaGFyICogb3V0cHV0X3B0ciA9IG91dHB1dDsKCi8vIGlucHV0X3B0ciDRgtC10L/QtdGA0Ywg0L/QsNGA0LDQvNC10YLRgApzaXplX3QgcnVuKGNoYXIgKiBjb2RlLCBzaXplX3QgY29kZV9sZW4sIHNpemVfdCBjb2RlX3BvcywgY2hhciAqIGlucHV0X3B0ciwgaW50IGRlZXApCnsKICAgc2l6ZV90IGksIGJlZ2luLCBlbmQ7CiAgIGZvcihpID0gY29kZV9wb3M7IGkgPCBjb2RlX2xlbjsgaSsrKQogICB7CiAgICAgIHN3aXRjaChjb2RlW2ldKQogICAgICB7CiAgICAgICAgIGNhc2UgJysnOiAoKmRhdGFfcHRyKSsrOyBicmVhazsKICAgICAgICAgY2FzZSAnLSc6ICgqZGF0YV9wdHIpLS07IGJyZWFrOwogICAgICAgICBjYXNlICc+JzogZGF0YV9wdHIrKzsgYnJlYWs7CiAgICAgICAgIGNhc2UgJzwnOiBkYXRhX3B0ci0tOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vINCY0LfQvNC90LXQvdC10LjQtSBpbnB1dF9wdHIKICAgICAgICAgY2FzZSAnLCc6ICpkYXRhX3B0ciA9ICppbnB1dF9wdHI7IGlucHV0X3B0cisrOyBicmVhazsKICAgICAgICAgY2FzZSAnLic6ICpvdXRwdXRfcHRyID0gKmRhdGFfcHRyOyBvdXRwdXRfcHRyKys7IGJyZWFrOwogICAgICAgICBjYXNlICddJzogcmV0dXJuIGk7CiAgICAgICAgIGNhc2UgJ1snOgogICAgICAgICAgICBiZWdpbiA9IGk7CiAgICAgICAgICAgIHdoaWxlKCpkYXRhX3B0cikKICAgICAgICAgICAgewogICAgICAgICAgICAgICBjb2RlX3BvcyA9IGJlZ2luICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDQoNC10LrRg9GA0YHQuNCy0L3Ri9C5INCy0YvQt9C+0LIgcnVuKCkKICAgICAgICAgICAgICAgZW5kID0gcnVuKGNvZGUsIGNvZGVfbGVuLCBjb2RlX3BvcywgaW5wdXRfcHRyLCBkZWVwICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaSA9IGVuZDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYoZGVlcCAmJiBpID09IGNvZGVfbGVuIC0gMSkKICAgICAgICAgYWJvcnQoKTsKICAgfQoKICAgcmV0dXJuIDA7Cn0KCmNoYXIgKiBicmFpbl9sdWNrKGNoYXIgKiBjb2RlLCBjaGFyICogX2lucHV0KQp7CiAgIHN0cmNweShpbnB1dCwgX2lucHV0KTsKICAgCiAgIC8vINCd0L7QstC+0LUg0L7QsdGK0Y/QstC70LXQvdC40LUgaW5wdXRfcHRyCiAgIGNoYXIgKiBpbnB1dF9wdHIgPSBpbnB1dDsKCiAgIHByaW50ZigiQ29kZTogJyVzJ1xuIiwgY29kZSk7CiAgIHByaW50ZigiSW5wdXQ6ICclcydcbiIsIGlucHV0KTsKICAgLy8g0JLRi9C30L7QsiBydW4oKQogICBydW4oY29kZSwgc3RybGVuKGNvZGUpLCAwLCBpbnB1dF9wdHIsIDApOwogICBwcmludGYoIlxuT3V0cHV0OiAnJXMnXG4iLCBvdXRwdXQpOwogICAKICAgY2hhciAqIHJlc3VsdCA9IChjaGFyICopbWFsbG9jKHN0cmxlbihvdXRwdXQpKTsKICAgc3RyY3B5KHJlc3VsdCwgb3V0cHV0KTsKICAgcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4oKQp7CiAgIGJyYWluX2x1Y2soIixbLlstXSxdIiwgInRlc3QiKTsKfQo=