Cod sursa(job #1586387)

Utilizator SirStevensIonut Morosan SirStevens Data 1 februarie 2016 08:23:46
Problema Bool Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <bits/stdc++.h>

using namespace std;

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

int n;

string s;
string ::iterator p;
char k;
bool x[150];


bool Adunare();
bool Inmultire();
bool Valuare();

bool Adunare()
{
    bool c=Inmultire();
    while(*p == '|' )
    {
        p++;
        c|=Inmultire();
    }
    return c;
}

bool Inmultire()

{
    bool c=Valuare();
    while(*p == '&')
    {
        p++;
        c &= Valuare();
    }
    return c;
}

bool Valuare()
{
    bool c=0;
    if(*p == '!')
    while(*p == '!'){
           p++;
        c = !Valuare();
    }
    else
    {
        if(*p == '('){
        p++;
        c = Adunare();
        p++;
       }
       else if((*p >= 'A' && *p <= 'Z') || *p == 't' || *p == 'f')
                    c = x[*p],p++;
    }
    return c;


    }


int main()
{
    getline(in,s);
    for(int i=0 ; i< s.size();i++)
    {
        if(s[i] == ' ')
            s.erase(s.begin() + i);
        if(s[i] == 'A' && s[i+1] == 'N')
            s[i]='&',s.erase(s.begin()+i, s.begin()+ i+3);
        if(s[i] == 'O' && s[i+1] == 'R')
            s[i]='|',s.erase(s.begin()+i, s.begin()+ i+2);
        if(s[i] == 'N' && s[i+1] == 'O')
            s[i]= '!', s.erase(s.begin()+i, s.begin()+i+3);
        if(s[i] == 'T' && s[i+1] == 'R')
            s[i]='t',s.erase(s.begin()+i, s.begin()+i+4);
        if(s[i]=='F' && s[i+1] == 'A')
            s[i]='f',s.erase(s.begin()+i, s.begin()+i+5);


    }

    x['t']=1;
    in>>n;
    p=s.begin();
    for(int i=1;i<=n;i++)
    {
        in>>k;
        x[k]=!x[k];
        p = s.begin();
        out<<Adunare();
    }


    return 0;
}