fork download
  1. #include <iostream>
  2. #include <array>
  3.  
  4. struct BrainFuck {
  5. std::array<uint8_t, 65536> mem;
  6. uint16_t pos = 0;
  7. };
  8.  
  9. struct Plus {
  10. static int run(BrainFuck& bf) {
  11. bf.mem[bf.pos]++;
  12. return 0;
  13. }
  14. };
  15.  
  16. struct Minus {
  17. static int run(BrainFuck& bf) {
  18. bf.mem[bf.pos]--;
  19. return 0;
  20. }
  21. };
  22.  
  23. struct Left {
  24. static int run(BrainFuck& bf) {
  25. bf.pos--;
  26. return 0;
  27. }
  28. };
  29.  
  30. struct Right {
  31. static int run(BrainFuck& bf) {
  32. bf.pos++;
  33. return 0;
  34. }
  35. };
  36.  
  37. struct In {
  38. static int run(BrainFuck& bf) {
  39. std::cin >> bf.mem[bf.pos];
  40. return 0;
  41. }
  42. };
  43.  
  44. struct Out {
  45. static int run(BrainFuck& bf) {
  46. std::cout << bf.mem[bf.pos];
  47. return 0;
  48. }
  49. };
  50.  
  51. template <typename T>
  52. struct Loop {
  53. static int run(BrainFuck& bf) {
  54. while (bf.mem[bf.pos])
  55. T::run(bf);
  56. return 0;
  57. }
  58. };
  59.  
  60. template <typename... T>
  61. void dummy(T... args) {
  62. }
  63.  
  64. template <typename... T>
  65. struct Seq {
  66. static int run(BrainFuck& bf) {
  67. int tmp[] = {T::run(bf)...};
  68. return 0;
  69. }
  70. };
  71.  
  72. int main()
  73. {
  74. Seq<In, Plus, Out> test;
  75.  
  76. BrainFuck bf;
  77. test.run(bf);
  78.  
  79. return 0;
  80. }
Success #stdin #stdout 0s 4260KB
stdin
f
stdout
g