Untitled

                Never    
C++
       
class ReverseCodec: public BaseCodec{
    std::string encode(const std::string &in){
        int n = in.length();
        string ans = in;
        for (int i = 0, j=n-1; i < j; i++,j--)
            swap(ans[i], ans[j]);
        return in;
    }
};

class CompressCodec: public BaseCodec{
    std::string encodec(const std::string &in){
        int cnt=1;
        std::stringstream ss;
        char prev = in[0];
        for(int i=1;i<in.length();i++){
            if(in[i]==prev) cnt++;
            else{
                if(cnt==1)
                    ss << prev;
                else if(cnt==2)
                    ss << prev << prev;
                else{
                    ss << cnt << prev;
                    prev = in[i];
                    cnt = 1;
                }
            }
            if(i == in.length()-1){
                if(cnt==1) 
                    ss << prev;
                else if(cnt==2)
                    ss << prev << prev;
                else
                    ss << cnt << prev;
            }
        }
        return ss.str();
    }
};

class DelayCodec: public BaseCodec{
    std::string memory = "None";
public:
    std::string encodec(const std::string &in){
        string temp = in;
        swap(temp,memory);
        return in;
    }
};

BaseCodec* getCodec(const std::string& name){
    if(name == "Reverse")   
        return new ReverseCodec;
    else if(name == "Compress") 
        return new CompressCodec;
    else if(name == "Delay")
        return new DelayCodec;
}

Raw Text