fork download
  1. #include <unordered_map>
  2. #include <algorithm>
  3. #include <iostream>
  4. #include <string>
  5. #include <stack>
  6.  
  7. template<typename BiIter> void run(BiIter first, BiIter last) {
  8. std::size_t dp=0;
  9. std::unordered_map<std::size_t, int> data;
  10. std::stack<BiIter> jmps;
  11.  
  12. for(auto it=first; it!=last; ++it) {
  13. switch(*it) {
  14. case '>': ++dp; break;
  15. case '<': --dp; break;
  16. case '+': ++data[dp]; break;
  17. case '-': --data[dp]; break;
  18. case '.':
  19. std::cout << static_cast<char>(data[dp]);
  20. break;
  21. case ',': {
  22. char c;
  23. std::cin >> c;
  24. data[dp]=c;
  25. break;
  26. }
  27. case '[':
  28. if(data[dp]==0)
  29. it=std::find(it, last, ']');
  30. else
  31. jmps.push(it);
  32. break;
  33. case ']':
  34. it=jmps.top()-1;
  35. jmps.pop();
  36. break;
  37. }
  38. }
  39. }
  40. void run(const std::string& code) { run(code.begin(), code.end()); }
  41. int main() {
  42. std::string program="++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.";
  43. run(program);
  44. }
Success #stdin #stdout 0s 3024KB
stdin
Standard input is empty
stdout
Hello World!