fork download
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. size_t run(char * code,
  6. size_t code_len,
  7. size_t code_pos,
  8. unsigned char ** data_ptr,
  9. char ** input_ptr,
  10. char ** output_ptr,
  11. int depth)
  12. {
  13. size_t i, begin, end;
  14. for(i = code_pos; i < code_len; i++)
  15. {
  16. switch(code[i])
  17. {
  18. case '+': (**data_ptr)++; break;
  19. case '-': (**data_ptr)--; break;
  20. case '>': (*data_ptr)++; break;
  21. case '<': (*data_ptr)--; break;
  22. case ',': **data_ptr = **input_ptr; (*input_ptr)++; break;
  23. case '.': **output_ptr = **data_ptr; (*output_ptr)++; break;
  24. case ']': return i;
  25. case '[':
  26. begin = i;
  27. while(**data_ptr)
  28. {
  29. code_pos = begin + 1;
  30. end = run(code, code_len, code_pos, data_ptr, input_ptr, output_ptr, depth + 1);
  31. }
  32. i = end;
  33. break;
  34. }
  35. }
  36.  
  37. return 0;
  38. }
  39.  
  40. char * brain_luck(char * code, char * input)
  41. {
  42. unsigned char * data = (unsigned char *)malloc(1024);
  43. memset(data, '\0', 1024);
  44.  
  45. char * output = (char *)malloc(1024);
  46. memset(output, '\0', 1024);
  47.  
  48. unsigned char * data_ptr = data;
  49. char * input_ptr = input;
  50. char * output_ptr = output;
  51.  
  52. printf("Code: '%s'\n", code);
  53. printf("Input: '%s'\n", input);
  54. run(code, strlen(code), 0, &data_ptr, &input_ptr, &output_ptr, 0);
  55. printf("Output: '%s'\n", output);
  56.  
  57. free(data);
  58.  
  59. return output;
  60. }
  61.  
  62. int main()
  63. {
  64. char *r1 =brain_luck(",[.[-],]", "test");
  65. printf("Result1: '%s'\n\n", r1);
  66. free(r1);
  67.  
  68. char *r2 =brain_luck("++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", "not used");
  69. printf("Result2: '%s'\n\n", r2);
  70. free(r2);
  71.  
  72. char *r3 =brain_luck(",[.[-],]", "test");
  73. printf("Result3:' %s'\n\n", r3);
  74. free(r3);
  75.  
  76. char *r4 =brain_luck(",+[-.,+]", "huita");
  77. printf("Result4: '%s'\n\n", r1);
  78. free(r4);
  79. }
  80.  
Success #stdin #stdout 0s 9416KB
stdin
Standard input is empty
stdout
Code: ',[.[-],]'
Input: 'test'
Output: 'test'
Result1: 'test'

Code: '++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.'
Input: 'not used'
Output: 'Hello World!
'
Result2: 'Hello World!
'

Code: ',[.[-],]'
Input: 'test'
Output: 'test'
Result3:' test'

Code: ',+[-.,+]'
Input: 'huita'
Output: 'huita'
Result4: 'huita'