#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;
class BinaryCode {
public:
vector <string> decode(string message)
{
string p;
char c;
int t,i,j=0;
vector <string> result;
result.push_back( "NONE" );
result.push_back( "NONE" );
message.insert(message.begin(),'0');
message.insert(message.end(),'0');
while(j<2)
{
p=message;
p[1]=j+'0';t=0;
for(i=2;i<message.length()-1;i++)
{
p[i]=message[i-1]-p[i-2]-p[i-1]+'0'+'0';
if(p[i]<'0'||p[i]>'1')
{t=1;break;}
}
if(!t)
{
p.erase(0,1);
p.erase(i-1,1);
result[j]=p;
i=message.length()-2;
c=message[i];
if(i!=1)
{
if(c!=p[i-1]+p[i-2]-'0')
result[j]="NONE";
}
else if(c!=p[i-1]) result[j]="NONE";
}
j++;
}
return result;
}
};
//<%:start-tests%>
double test0() {
string p0 = "123210122";
BinaryCode * obj = new BinaryCode();
clock_t start = clock();
vector <string> my_answer = obj->decode(p0);
clock_t end = clock();
delete obj;
cout <<"Time: " <<(double)(end-start)/CLOCKS_PER_SEC <<" seconds" <<endl;
string t1[] = { "011100011", "NONE" };
vector <string> p1(t1, t1+sizeof(t1)/sizeof(string));
cout <<"Desired answer: " <<endl;
cout <<"\t{ ";
if (p1.size() > 0) {
cout <<"\""<<p1[0]<<"\"";
for (int i=1; i<p1.size(); i++)
cout <<", \"" <<p1[i]<<"\"";
cout <<" }" <<endl;
}
else
cout <<"}" <<endl;
cout <<endl <<"Your answer: " <<endl;
cout <<"\t{ ";
if (my_answer.size() > 0) {
cout <<"\""<<my_answer[0]<<"\"";
for (int i=1; i<my_answer.size(); i++)
cout <<", \"" <<my_answer[i]<<"\"";
cout <<" }" <<endl;
}
else
cout <<"}" <<endl;
if (my_answer != p1) {
cout <<"DOESN'T MATCH!!!!" <<endl <<endl;
return -1;
}
else {
cout <<"Match :-)" <<endl <<endl;
return (double)(end-start)/CLOCKS_PER_SEC;
}
}
double test1() {
string p0 = "11";
BinaryCode * obj = new BinaryCode();
clock_t start = clock();
vector <string> my_answer = obj->decode(p0);
clock_t end = clock();
delete obj;
cout <<"Time: " <<(double)(end-start)/CLOCKS_PER_SEC <<" seconds" <<endl;
string t1[] = { "01", "10" };
vector <string> p1(t1, t1+sizeof(t1)/sizeof(string));
cout <<"Desired answer: " <<endl;
cout <<"\t{ ";
if (p1.size() > 0) {
cout <<"\""<<p1[0]<<"\"";
for (int i=1; i<p1.size(); i++)
cout <<", \"" <<p1[i]<<"\"";
cout <<" }" <<endl;
}
else
cout <<"}" <<endl;
cout <<endl <<"Your answer: " <<endl;
cout <<"\t{ ";
if (my_answer.size() > 0) {
cout <<"\""<<my_answer[0]<<"\"";
for (int i=1; i<my_answer.size(); i++)
cout <<", \"" <<my_answer[i]<<"\"";
cout <<" }" <<endl;
}
else
cout <<"}" <<endl;
if (my_answer != p1) {
cout <<"DOESN'T MATCH!!!!" <<endl <<endl;
return -1;
}
else {
cout <<"Match :-)" <<endl <<endl;
return (double)(end-start)/CLOCKS_PER_SEC;
}
}
double test2() {
string p0 = "22111";
BinaryCode * obj = new BinaryCode();
clock_t start = clock();
vector <string> my_answer = obj->decode(p0);
clock_t end = clock();
delete obj;
cout <<"Time: " <<(double)(end-start)/CLOCKS_PER_SEC <<" seconds" <<endl;
string t1[] = { "NONE", "11001" };
vector <string> p1(t1, t1+sizeof(t1)/sizeof(string));
cout <<"Desired answer: " <<endl;
cout <<"\t{ ";
if (p1.size() > 0) {
cout <<"\""<<p1[0]<<"\"";
for (int i=1; i<p1.size(); i++)
cout <<", \"" <<p1[i]<<"\"";
cout <<" }" <<endl;
}
else
cout <<"}" <<endl;
cout <<endl <<"Your answer: " <<endl;
cout <<"\t{ ";
if (my_answer.size() > 0) {
cout <<"\""<<my_answer[0]<<"\"";
for (int i=1; i<my_answer.size(); i++)
cout <<", \"" <<my_answer[i]<<"\"";
cout <<" }" <<endl;
}
else
cout <<"}" <<endl;
if (my_answer != p1) {
cout <<"DOESN'T MATCH!!!!" <<endl <<endl;
return -1;
}
else {
cout <<"Match :-)" <<endl <<endl;
return (double)(end-start)/CLOCKS_PER_SEC;
}
}
double test3() {
string p0 = "123210120";
BinaryCode * obj = new BinaryCode();
clock_t start = clock();
vector <string> my_answer = obj->decode(p0);
clock_t end = clock();
delete obj;
cout <<"Time: " <<(double)(end-start)/CLOCKS_PER_SEC <<" seconds" <<endl;
string t1[] = { "NONE", "NONE" };
vector <string> p1(t1, t1+sizeof(t1)/sizeof(string));
cout <<"Desired answer: " <<endl;
cout <<"\t{ ";
if (p1.size() > 0) {
cout <<"\""<<p1[0]<<"\"";
for (int i=1; i<p1.size(); i++)
cout <<", \"" <<p1[i]<<"\"";
cout <<" }" <<endl;
}
else
cout <<"}" <<endl;
cout <<endl <<"Your answer: " <<endl;
cout <<"\t{ ";
if (my_answer.size() > 0) {
cout <<"\""<<my_answer[0]<<"\"";
for (int i=1; i<my_answer.size(); i++)
cout <<", \"" <<my_answer[i]<<"\"";
cout <<" }" <<endl;
}
else
cout <<"}" <<endl;
if (my_answer != p1) {
cout <<"DOESN'T MATCH!!!!" <<endl <<endl;
return -1;
}
else {
cout <<"Match :-)" <<endl <<endl;
return (double)(end-start)/CLOCKS_PER_SEC;
}
}
double test4() {
string p0 = "3";
BinaryCode * obj = new BinaryCode();
clock_t start = clock();
vector <string> my_answer = obj->decode(p0);
clock_t end = clock();
delete obj;
cout <<"Time: " <<(double)(end-start)/CLOCKS_PER_SEC <<" seconds" <<endl;
string t1[] = { "NONE", "NONE" };
vector <string> p1(t1, t1+sizeof(t1)/sizeof(string));
cout <<"Desired answer: " <<endl;
cout <<"\t{ ";
if (p1.size() > 0) {
cout <<"\""<<p1[0]<<"\"";
for (int i=1; i<p1.size(); i++)
cout <<", \"" <<p1[i]<<"\"";
cout <<" }" <<endl;
}
else
cout <<"}" <<endl;
cout <<endl <<"Your answer: " <<endl;
cout <<"\t{ ";
if (my_answer.size() > 0) {
cout <<"\""<<my_answer[0]<<"\"";
for (int i=1; i<my_answer.size(); i++)
cout <<", \"" <<my_answer[i]<<"\"";
cout <<" }" <<endl;
}
else
cout <<"}" <<endl;
if (my_answer != p1) {
cout <<"DOESN'T MATCH!!!!" <<endl <<endl;
return -1;
}
else {
cout <<"Match :-)" <<endl <<endl;
return (double)(end-start)/CLOCKS_PER_SEC;
}
}
double test5() {
string p0 = "12221112222221112221111111112221111";
BinaryCode * obj = new BinaryCode();
clock_t start = clock();
vector <string> my_answer = obj->decode(p0);
clock_t end = clock();
delete obj;
cout <<"Time: " <<(double)(end-start)/CLOCKS_PER_SEC <<" seconds" <<endl;
string t1[] = { "01101001101101001101001001001101001", "10110010110110010110010010010110010" };
vector <string> p1(t1, t1+sizeof(t1)/sizeof(string));
cout <<"Desired answer: " <<endl;
cout <<"\t{ ";
if (p1.size() > 0) {
cout <<"\""<<p1[0]<<"\"";
for (int i=1; i<p1.size(); i++)
cout <<", \"" <<p1[i]<<"\"";
cout <<" }" <<endl;
}
else
cout <<"}" <<endl;
cout <<endl <<"Your answer: " <<endl;
cout <<"\t{ ";
if (my_answer.size() > 0) {
cout <<"\""<<my_answer[0]<<"\"";
for (int i=1; i<my_answer.size(); i++)
cout <<", \"" <<my_answer[i]<<"\"";
cout <<" }" <<endl;
}
else
cout <<"}" <<endl;
if (my_answer != p1) {
cout <<"DOESN'T MATCH!!!!" <<endl <<endl;
return -1;
}
else {
cout <<"Match :-)" <<endl <<endl;
return (double)(end-start)/CLOCKS_PER_SEC;
}
}
//<%:end-tests%>
int main() {
int time;
bool errors = false;
time = test0();
if (time < 0)
errors = true;
time = test1();
if (time < 0)
errors = true;
time = test2();
if (time < 0)
errors = true;
time = test3();
if (time < 0)
errors = true;
time = test4();
if (time < 0)
errors = true;
time = test5();
if (time < 0)
errors = true;
if (!errors)
cout <<"You're a stud (at least on the example cases)!" <<endl;
else
cout <<"Some of the test cases had errors." <<endl;
}
//<%:testing-code%>
//Powered by [KawigiEdit] 2.0!