Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- struct Status{
- int buf[256];
- int pos;
- Status():pos(0){}
- Status add(){
- buf[pos]++;
- return *this;
- }
- Status sub(){
- buf[pos]--;
- return *this;
- }
- Status let(){
- pos--;
- return *this;
- }
- Status rit(){
- pos++;
- return *this;
- }
- Status get(){
- char p;
- std::cin.get(p);
- buf[pos]=p;
- return *this;
- }
- Status put(){
- std::cout<<char(buf[pos]);
- return *this;
- }
- };
- template<class T,class U> struct add{
- Status operator ()(Status s){
- return U()(T()(s).add());
- }
- };
- template<class T,class U> struct sub{
- Status operator ()(Status s){
- return U()(T()(s).sub());
- }
- };
- template<class T,class U> struct let{
- Status operator ()(Status s){
- return U()(T()(s).let());
- }
- };
- template<class T,class U> struct rit{
- Status operator ()(Status s){
- return U()(T()(s).rit());
- }
- };
- template<class T,class U> struct lop{
- Status operator ()(Status s){
- s=T()(s);
- while(s.buf[s.pos]){
- s=U()(s);
- }
- return s;
- }
- };
- template<class T,class U> struct get{
- Status operator ()(Status s){
- return U()(T()(s).get());
- }
- };
- template<class T,int N> struct put{
- Status operator ()(Status s){
- s=T()(s);
- for(int i=0;i<9-N;i++)s=s.put();
- return s;
- }
- };
- template<class T,int N=9> struct Brainfuck{
- Brainfuck<T,N-1> _;
- template<class U,int M> Brainfuck<add<put<T,N>,put<U,M> > > operator + (Brainfuck<U,M>){
- return Brainfuck<add<put<T,N>,put<U,M> > >();
- }
- template<class U,int M> Brainfuck<sub<put<T,N>,put<U,M> > > operator - (Brainfuck<U,M>){
- return Brainfuck<sub<put<T,N>,put<U,M> > >();
- }
- template<class U,int M> Brainfuck<let<put<T,N>,put<U,M> > > operator < (Brainfuck<U,M>){
- return Brainfuck<let<put<T,N>,put<U,M> > >();
- }
- template<class U,int M> Brainfuck<rit<put<T,N>,put<U,M> > > operator > (Brainfuck<U,M>){
- return Brainfuck<rit<put<T,N>,put<U,M> > >();
- }
- template<class U,int M> Brainfuck<get<put<T,N>,put<U,M> > > operator , (Brainfuck<U,M>){
- return Brainfuck<get<put<T,N>,put<U,M> > >();
- }
- template<class U,int M> Brainfuck<lop<put<T,N>,put<U,M> > > operator [] (Brainfuck<U,M>){
- return Brainfuck<lop<put<T,N>,put<U,M> > >();
- }
- Status operator ()(){
- return T()(Status());
- }
- };
- template<class T> struct Brainfuck<T,0>{
- template<class U,int M> Brainfuck<add<put<T,0>,put<U,M> > > operator + (Brainfuck<U,M>){
- return Brainfuck<add<put<T,0>,put<U,M> > >();
- }
- template<class U,int M> Brainfuck<sub<put<T,0>,put<U,M> > > operator - (Brainfuck<U,M>){
- return Brainfuck<sub<put<T,0>,put<U,M> > >();
- }
- template<class U,int M> Brainfuck<let<put<T,0>,put<U,M> > > operator < (Brainfuck<U,M>){
- return Brainfuck<let<put<T,0>,put<U,M> > >();
- }
- template<class U,int M> Brainfuck<rit<put<T,0>,put<U,M> > > operator > (Brainfuck<U,M>){
- return Brainfuck<rit<put<T,0>,put<U,M> > >();
- }
- template<class U,int M> Brainfuck<get<put<T,0>,put<U,M> > > operator , (Brainfuck<U,M>){
- return Brainfuck<get<put<T,0>,put<U,M> > >();
- }
- template<class U,int M> Brainfuck<lop<put<T,0>,put<U,M> > > operator [] (Brainfuck<U,M>){
- return Brainfuck<lop<put<T,0>,put<U,M> > >();
- }
- Status operator ()(){
- return T()(Status());
- }
- };
- struct t{
- Status operator ()(Status s){
- return s;
- }
- };
- Brainfuck<t> _;
- int main(){
- (_+_+_+_+_+_+_+_+_+_[_>_+_+_+_+_+_+_+_+_>_+_+_+_+_+_+_+_+_+_+_+_>_+_+_+_+_+_<_<_<_-_]>_._>_+_+_._+_+_+_+_+_+_+_._._+_+_+_._>_-_._-_-_-_-_-_-_-_-_-_-_-_-_._<_+_+_+_+_+_+_+_+_._-_-_-_-_-_-_-_-_._+_+_+_._-_-_-_-_-_-_._-_-_-_-_-_-_-_-_._>_+_._)();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement