Cod sursa(job #1760336)

Utilizator ionut98Bejenariu Ionut Daniel ionut98 Data 20 septembrie 2016 18:06:40
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream>
#include<string>
using namespace std;
string s;
int v[300],n,i,t;
char c;
bool eval(int val);
bool exp()
{
    while(s[i]==' ')
      ++i;
    bool rs;
    if(s[i]=='(')
    {
        ++i;
        return eval(exp());
    }
    if(i+1<n&&s[i+1]!=' '&&s[i+1]!=')')
    {
        if(s[i]=='t')
        {
            i+=4;
            rs=1;
        }
        else if(s[i]=='F')
        {
            i+=5;
            rs=0;
        }
        else
        {
            i+=3;
            rs=!exp();
        }
    }
    else
    {
        rs=v[s[i]];
        i++;
    }
    return rs;
}
bool eval(int val)
{
    if(i>=n)
      return val;
    while(s[i]==' ')
      ++i;
    if(s[i]==')')
    {
        i++;
        return val;
    }
    if(i+1<n)
    {
        if(s[i]=='A')
        {
            i+=3;
            return eval(val&exp());
        }
        if(s[i]=='O')
        {
            i+=2;
            return val|eval(exp());
        }
    }
    return val;
}
int main()
{
    ifstream f("bool.in");
    ofstream g("bool.out");
    getline(f,s);
    n=s.length();
    f>>t;
    while(t--)
    {
        f>>c;
        v[c]=!v[c];
        i=0;
        g<<eval(exp());
    }
    return 0;
}