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. char * input_ptr = input;
  10.  
  11. char output[1024] = {0};
  12. char * output_ptr = output;
  13.  
  14. size_t run(char * code, size_t code_len, size_t code_pos, 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. case ',': *data_ptr = *input_ptr; input_ptr++; break;
  26. case '.': *output_ptr = *data_ptr; output_ptr++; break;
  27. case ']': return i;
  28. case '[':
  29. begin = i;
  30. while(*data_ptr)
  31. {
  32. code_pos = begin + 1;
  33. end = run(code, code_len, code_pos, deep + 1);
  34. }
  35. i = end;
  36. break;
  37. }
  38. if(deep && i == code_len - 1)
  39. abort();
  40. }
  41.  
  42. return 0;
  43. }
  44.  
  45. char * brain_luck(char * code, char * _input)
  46. {
  47. strcpy(input, _input);
  48.  
  49. printf("Code: '%s'\n", code);
  50. printf("Input: '%s'\n", input);
  51. run(code, strlen(code), 0, 0);
  52. printf("\nOutput: '%s'\n", output);
  53.  
  54. char * result = (char *)malloc(strlen(output));
  55. strcpy(result, output);
  56. return result;
  57. }
  58.  
  59. int main()
  60. {
  61. brain_luck(",[.[-],]", "test");
  62. }
  63.  
Success #stdin #stdout 0s 10304KB
stdin
Standard input is empty
stdout
Code: ',[.[-],]'
Input: 'test'

Output: 'test'