fork download
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. unsigned char data[1024] = {0};
  6. unsigned char * data_ptr = data;
  7.  
  8. char input[1024] = {0};
  9.  
  10. char output[1024] = {0};
  11. char * output_ptr = output;
  12.  
  13. // input_ptr теперь параметр
  14. size_t run(char * code, size_t code_len, size_t code_pos, char * input_ptr, int deep)
  15. {
  16. size_t i, begin, end;
  17. for(i = code_pos; i < code_len; i++)
  18. {
  19. switch(code[i])
  20. {
  21. case '+': (*data_ptr)++; break;
  22. case '-': (*data_ptr)--; break;
  23. case '>': data_ptr++; break;
  24. case '<': data_ptr--; break;
  25. // Измненеие input_ptr
  26. case ',': *data_ptr = *input_ptr; input_ptr++; break;
  27. case '.': *output_ptr = *data_ptr; output_ptr++; break;
  28. case ']': return i;
  29. case '[':
  30. begin = i;
  31. while(*data_ptr)
  32. {
  33. code_pos = begin + 1;
  34. // Рекурсивный вызов run()
  35. end = run(code, code_len, code_pos, input_ptr, deep + 1);
  36. }
  37. i = end;
  38. break;
  39. }
  40. if(deep && i == code_len - 1)
  41. abort();
  42. }
  43.  
  44. return 0;
  45. }
  46.  
  47. char * brain_luck(char * code, char * _input)
  48. {
  49. strcpy(input, _input);
  50.  
  51. // Новое объявление input_ptr
  52. char * input_ptr = input;
  53.  
  54. printf("Code: '%s'\n", code);
  55. printf("Input: '%s'\n", input);
  56. // Вызов run()
  57. run(code, strlen(code), 0, input_ptr, 0);
  58. printf("\nOutput: '%s'\n", output);
  59.  
  60. char * result = (char *)malloc(strlen(output));
  61. strcpy(result, output);
  62. return result;
  63. }
  64.  
  65. int main()
  66. {
  67. brain_luck(",[.[-],]", "test");
  68. }
  69.  
Runtime error #stdin #stdout 0s 9416KB
stdin
Standard input is empty
stdout
Standard output is empty