Advertisement
Guest User

Untitled

a guest
Feb 5th, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. struct Status{
  4. int buf[256];
  5. int pos;
  6. Status():pos(0){}
  7. Status add(){
  8. buf[pos]++;
  9. return *this;
  10. }
  11. Status sub(){
  12. buf[pos]--;
  13. return *this;
  14. }
  15. Status let(){
  16. pos--;
  17. return *this;
  18. }
  19. Status rit(){
  20. pos++;
  21. return *this;
  22. }
  23. Status get(){
  24. char p;
  25. std::cin.get(p);
  26. buf[pos]=p;
  27. return *this;
  28. }
  29. Status put(){
  30. std::cout<<char(buf[pos]);
  31. return *this;
  32. }
  33. };
  34.  
  35. template<class T,class U> struct add{
  36. Status operator ()(Status s){
  37. return U()(T()(s).add());
  38. }
  39. };
  40. template<class T,class U> struct sub{
  41. Status operator ()(Status s){
  42. return U()(T()(s).sub());
  43. }
  44. };
  45. template<class T,class U> struct let{
  46. Status operator ()(Status s){
  47. return U()(T()(s).let());
  48. }
  49. };
  50. template<class T,class U> struct rit{
  51. Status operator ()(Status s){
  52. return U()(T()(s).rit());
  53. }
  54. };
  55. template<class T,class U> struct lop{
  56. Status operator ()(Status s){
  57. s=T()(s);
  58. while(s.buf[s.pos]){
  59. s=U()(s);
  60. }
  61. return s;
  62. }
  63. };
  64. template<class T,class U> struct get{
  65. Status operator ()(Status s){
  66. return U()(T()(s).get());
  67. }
  68. };
  69. template<class T,int N> struct put{
  70. Status operator ()(Status s){
  71. s=T()(s);
  72. for(int i=0;i<9-N;i++)s=s.put();
  73. return s;
  74. }
  75. };
  76.  
  77. template<class T,int N=9> struct Brainfuck{
  78. Brainfuck<T,N-1> _;
  79. template<class U,int M> Brainfuck<add<put<T,N>,put<U,M> > > operator + (Brainfuck<U,M>){
  80. return Brainfuck<add<put<T,N>,put<U,M> > >();
  81. }
  82. template<class U,int M> Brainfuck<sub<put<T,N>,put<U,M> > > operator - (Brainfuck<U,M>){
  83. return Brainfuck<sub<put<T,N>,put<U,M> > >();
  84. }
  85. template<class U,int M> Brainfuck<let<put<T,N>,put<U,M> > > operator < (Brainfuck<U,M>){
  86. return Brainfuck<let<put<T,N>,put<U,M> > >();
  87. }
  88. template<class U,int M> Brainfuck<rit<put<T,N>,put<U,M> > > operator > (Brainfuck<U,M>){
  89. return Brainfuck<rit<put<T,N>,put<U,M> > >();
  90. }
  91. template<class U,int M> Brainfuck<get<put<T,N>,put<U,M> > > operator , (Brainfuck<U,M>){
  92. return Brainfuck<get<put<T,N>,put<U,M> > >();
  93. }
  94. template<class U,int M> Brainfuck<lop<put<T,N>,put<U,M> > > operator [] (Brainfuck<U,M>){
  95. return Brainfuck<lop<put<T,N>,put<U,M> > >();
  96. }
  97. Status operator ()(){
  98. return T()(Status());
  99. }
  100. };
  101.  
  102. template<class T> struct Brainfuck<T,0>{
  103. template<class U,int M> Brainfuck<add<put<T,0>,put<U,M> > > operator + (Brainfuck<U,M>){
  104. return Brainfuck<add<put<T,0>,put<U,M> > >();
  105. }
  106. template<class U,int M> Brainfuck<sub<put<T,0>,put<U,M> > > operator - (Brainfuck<U,M>){
  107. return Brainfuck<sub<put<T,0>,put<U,M> > >();
  108. }
  109. template<class U,int M> Brainfuck<let<put<T,0>,put<U,M> > > operator < (Brainfuck<U,M>){
  110. return Brainfuck<let<put<T,0>,put<U,M> > >();
  111. }
  112. template<class U,int M> Brainfuck<rit<put<T,0>,put<U,M> > > operator > (Brainfuck<U,M>){
  113. return Brainfuck<rit<put<T,0>,put<U,M> > >();
  114. }
  115. template<class U,int M> Brainfuck<get<put<T,0>,put<U,M> > > operator , (Brainfuck<U,M>){
  116. return Brainfuck<get<put<T,0>,put<U,M> > >();
  117. }
  118. template<class U,int M> Brainfuck<lop<put<T,0>,put<U,M> > > operator [] (Brainfuck<U,M>){
  119. return Brainfuck<lop<put<T,0>,put<U,M> > >();
  120. }
  121. Status operator ()(){
  122. return T()(Status());
  123. }
  124. };
  125.  
  126. struct t{
  127. Status operator ()(Status s){
  128. return s;
  129. }
  130. };
  131.  
  132. Brainfuck<t> _;
  133.  
  134. int main(){
  135. (_+_+_+_+_+_+_+_+_+_[_>_+_+_+_+_+_+_+_+_>_+_+_+_+_+_+_+_+_+_+_+_>_+_+_+_+_+_<_<_<_-_]>_._>_+_+_._+_+_+_+_+_+_+_._._+_+_+_._>_-_._-_-_-_-_-_-_-_-_-_-_-_-_._<_+_+_+_+_+_+_+_+_._-_-_-_-_-_-_-_-_._+_+_+_._-_-_-_-_-_-_._-_-_-_-_-_-_-_-_._>_+_._)();
  136. return 0;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement