Cod sursa(job #1691361)

Utilizator savulescustefanSavulescu Stefan savulescustefan Data 18 aprilie 2016 07:44:25
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include <cstdio>

using namespace std;
int i,n,j;
bool nr,nr2,a[30];
char s[1004],x;
bool eval ();
bool factor()
{
    bool nr=false;
    if (s[i]=='(')
    {
        i++;
        nr=eval();
        i+=2;
    }
    else if ((s[i]=='T' && s[i+1]=='R') || (s[i]=='F' && s[i+1]=='A') || ((s[i]>='A' && s[i]<='Z') && (s[i+1]<'A' || s[i+1]>'Z')))
    {
        if (s[i]=='T' && s[i+1]=='R')
        {
            i+=5;
            nr=true;
        }
        else if (s[i]=='F' && s[i+1]=='A')
        {
            i+=6;
            nr=false;
        }
        else
        {
            nr=a[s[i]-'A'];
            i+=2;
        }
    }
    return nr;
}
bool fact ()
{
    bool nr=true;
    nr=factor();
    while (s[i]=='N' && s[i+1]=='O')
    {
        if (a[s[i+4]-'A']==false)
            a[s[i+4]-'A']=true;
        else
            a[s[i+4]-'A']=false;
        i+=4;
        nr=factor();
        if (a[s[i+4]-'A']==false)
            a[s[i+4]-'A']=true;
        else
            a[s[i+4]-'A']=false;
    }
    return nr;
}
bool termen ()
{
    bool nr=true;
    nr=fact();
    while (s[i]=='A' && s[i+1]=='N')
    {
        i+=4;
        nr2=fact();
        if (nr==true && nr2==true)
            nr=true;
        else
            nr=false;
    }
    return nr;
}
bool eval ()
{
    bool nr=true;
    nr=termen();
    while (s[i]=='O' && s[i+1]=='R')
    {
        i+=3;
        nr2=termen();
        if (nr==true || nr2==true)
            nr=true;
        else
            nr=false;
    }
    return nr;
}
int main()
{
    freopen ("bool.in","r",stdin);
    freopen ("bool.out","w",stdout);
    gets(s);
    scanf ("%d\n", &n);
    for (j=1;j<=n;j++)
    {
        scanf ("%c", &x);
        if (a[x-'A']==false)
            a[x-'A']=true;
        else
            a[x-'A']=false;
        i=0;
        nr=eval();
        if (nr==true)
            printf ("1");
        else
            printf ("0");
    }
    return 0;
}