Cod sursa(job #2032078)

Utilizator EricEric Vilcu Eric Data 4 octombrie 2017 15:12:34
Problema Bool Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
#define is() if(a[i]==' ')++i
#define cuv() while(a[i]>='A')++i
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int i,n;char o,a[1002];
bool val['Z'+1];
bool eval();
bool getval();

bool eval()
{

    bool t=getval();
    if(a[i]==')'){++i;is();return t;}
    switch (a[i])
    {
        case 'A':cuv();is();return t&&getval();break;//AND
        case 'O':cuv();is();return t||getval();break;//OR
    }
}

bool getval()
{
    if(a[i]=='('){++i;
    return eval();}
    bool t=0;
    while(a[i+1]=='O'){cuv();is();t=!t;}//NOT
    if (a[i+1]=='R'){cuv();is();return t^1;}//TRUE
    if (a[i+1]=='A'){cuv();is();return t^0;}//FALSE
    t=val[a[i]]^t;cuv();is();
    return t;
}

int main()
{
    f.getline(a,1001);
    f>>n;
    for(int q=1;q<=n;++q)
    {
        f>>o;i=0;
        val[o]=!val[o];
        g<<eval();
    }
}