Cod sursa(job #1789618)

Utilizator Lungu007Lungu Ionut Lungu007 Data 27 octombrie 2016 11:41:38
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <string>

using namespace std;

ifstream in("bool.in");
ofstream out("bool.out");

int n,p;
string s,mod;

unordered_map<char,bool> harta;

bool prior();
bool prinot();
bool priand();

bool eval()
{
    bool r = prior();

    while(s[p]=='O' && s[p+1]=='R')
    {
        p+=3;
        r = r || prior();
    }
    return r;
}

bool prior()
{
    bool r = priand();

    while(s[p]=='A' && s[p+1]=='N' && s[p+2]=='D')
    {
        p+=4;
        r = r && priand();
    }

    return r;
}

bool priand()
{
    bool r;

    if(s[p]=='N' && s[p+1]=='O' && s[p+2]=='T')
    {
        p=p+4;
        r = !prinot();

    }
    else
    {
        r = prinot();
    }

    return r;
}

bool prinot()
{
    bool r;
    if(s[p]=='(')
    {
        p++;
        r = eval();
        p++;
    }
    else if((s[p]=='T' && s[p+1]=='R' && s[p+2]=='U' && s[p+3]=='E') || (s[p]=='F' && s[p+1]=='A' && s[p+2]=='L' && s[p+3]=='S' && s[p+4]=='E'))
    {
        if(s[p]=='T' && s[p+1]=='R' && s[p+2]=='U' && s[p+3]=='E')
        {
            p+=5;
            r =  true;
        }
        else  if(s[p]=='F' && s[p+1]=='A' && s[p+2]=='L' && s[p+3]=='S' && s[p+4]=='E')
        {
            p+=6;
            r= false;
        }
    }
    else
    {
        r = harta[s[p]];
        p+=2;
    }
    return r;
}


int main()
{
    getline(in,s);
    in >> n;
    getline(in,mod); // temp

    getline(in,mod);

    for(int i='A';i<='Z';i++)
    {
        harta[(char)i] = false;
    }


//    cout << eval() << endl;
//    cout << s.size() << " " ;
//    cout << p;
//

    for(int i=0;i<n;i++)
    {
        harta[mod[i]] = !harta[mod[i]];
        p=0;
        out << eval();
    }

    return 0;
}