Cod sursa(job #2204064)

Utilizator YouDontNeedMyNameJurcut Paul YouDontNeedMyName Data 14 mai 2018 12:34:46
Problema Bool Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>
#define N_MAX 1015
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
char op,str[N_MAX];
int n,k,p;
bool hopa[N_MAX];
void skip()
{
    while(p<=n && p==' ')
        p++;
}
bool oor();
bool eval()
{
    skip();
    bool wtf;
    if(str[p]=='(')
    {
        p++;
        wtf=oor();
        p++;
    }
    else if(str[p]=='T' && str[p+1]=='R')
    {
        p+=4;
        wtf=true;
    }
    else if(str[p]=='F' && str[p+1]=='A')
    {
        p+=5;
        wtf=false;
    }
    else if(str[p]=='N' && str[p+1]=='O')
    {
        p+=3;
        wtf=!eval();
    }
    else
    {
        wtf=hopa[str[p]];
    }
    skip();
    return wtf;
}
bool aand()
{
    skip();
    bool wtf=eval();
    skip();
    while(str[p]=='A' && str[p+1]=='N' && p<=n)
    {
        p+=3;
        wtf &=eval();
        skip();
    }
    return wtf;
}
bool oor()
{
    skip();
    bool wtf=aand();
    skip();
    while(str[p]=='O' && str[p+1]=='R' && p<=n)
    {
        p+=2;
        wtf |=aand();
        skip();
    }
    return wtf;
}
int main()
{
    in.get(str+1,N_MAX-1);
    in.get();
    n=strlen(str+1);
    in >> k;
    for(int i=0; i<k; i++)
    {
        in >> op;
        p=1;
        hopa[op]=!hopa[op];
        out << oor();
    }
    return 0;
}