Cod sursa(job #911636)

Utilizator apopeid13Apopeid Alejandro apopeid13 Data 11 martie 2013 20:01:54
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.21 kb
#include<fstream>
#define DIM 1010
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int t,i,n,v[DIM];
char s[DIM],S[DIM],*p,c;
int exp(); int orr(); int an(); int no(); void cod();
 
int main ()
{
    f.get(s,1001);
    t=-1;
    cod();
    v['1']=1;
    f>>n;
    for(i=1;i<=n;++i)
    {
        p=S;
        f>>c;
        v[c]=!v[c];
        g<<exp();
    }
}
int exp()
{
    int r=orr();
    while(*p=='|')
    {
        ++p;
        r=r|orr();
         
    }
    return r;
}
int orr()
{
    int r=an();
    while(*p=='&')
    {
        ++p;
        r=r&an();
         
    }
    return r;
}
int an()
{
    int r=no();
    while(*p=='^')
    {
        ++p;
        r=r^no();
    }
    return r;
}
int no()
{
    int r=0;
    if(*p=='(')
    {
        ++p;
        r=exp();
    }
    else
    if(*p=='1'||*p=='0'||(*p<='Z'&&*p>='A'))
    {
        r=v[*p];
    }
    ++p;
    return r;
}
 
 
 
 
void cod()
{
    for(i=0;s[i];++i)
    {
        if(s[i]==' ')
            continue;
        if(s[i]=='(')
            S[++t]=s[i];
        else
            if((s[i]<='Z'&&s[i]>='A')&&(s[i+1]>'Z'||s[i+1]<'A'))
                S[++t]=s[i];
            else
            if(s[i]==')')
                S[++t]=s[i];
            else
                if(s[i]=='T'&&s[i+1]=='R'&&s[i+2]=='U'&&s[i+3]=='E')
                {
                    S[++t]='1';
                    i+=3;
                }
                else
                if(s[i]=='F'&&s[i+1]=='A'&&s[i+2]=='L'&&s[i+3]=='S'&&s[i+4]=='E')
                {
                    S[++t]='0';
                    i+=4;
                }
                else
                if(s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T')
                {
                    S[++t]='1';
                    S[++t]='^';
                    i+=2;
                }
                else
                if(s[i]=='O'&&s[i+1]=='R')
                {
                    S[++t]='|';
                    i++;
                }
                else
                if(s[i]=='A'&&s[i+1]=='N'&&s[i+2]=='D')
                {
                    S[++t]='&';
                    i+=2;
                }
    }
}