Cod sursa(job #1313596)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 10 ianuarie 2015 21:12:46
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char Str[1005],Str2[1005];
bool Result[30];
int evaluateExpresion();
int evaluateNumber();
int evaluateMultiplication();
int ind,len;
int evaluateNumber()
{
    int result=0;
    if(Str[ind]=='(')
    {
        ++ind;
        result=evaluateExpresion();
        ++ind;
    }
    else
    {
        if(Str[ind]=='T' && Str[ind+1]=='R' && Str[ind+2]=='U' && Str[ind+3]=='E')
        {
            ind+=4;
            return 1;
        }
        if(Str[ind]=='F' && Str[ind+1]=='A' && Str[ind+2]=='L' && Str[ind+3]=='S' && Str[ind+4]=='E')
        {
            ind+=5;
            return 0;
        }
        if(Str[ind]=='N' && Str[ind+1]=='O' && Str[ind+2]=='T')
        {
            result=1-Result[Str[ind+1]-'A'];
            ind+=4;
        }
        else
        {
            result=Result[Str[ind]-'A'];
            ++ind;
        }
    }
    return result;
}
int evaluateMultiplication()
{
    int result=evaluateNumber();
    while(Str[ind]=='A' && Str[ind+1]=='N' && Str[ind+2]=='D')
    {
        ind+=3;
        result=result && evaluateNumber();
    }
    return result;
}
int evaluateExpresion()
{
    int result=evaluateMultiplication();
    while(Str[ind]=='O' || Str[ind+1]=='R')
    {
        ind+=2;
        result = result || evaluateMultiplication();
    }
    return result;
}
int main()
{
    f.getline(Str2,1005);
    len=strlen(Str2);
    for(int i=0;i<len;i++)
    {
        if(Str2[i]==' ')
            continue;
        Str[ind++]=Str2[i];
    }
    ind=0;
    int N;
    f>>N;
    char ch;
    f.get(ch);
    for(int i=1;i<=N;i++)
    {
        f.get(ch);
        ind=0;
        Result[ch-'A']=1-Result[ch-'A'];
        g<<evaluateExpresion();
    }

    return 0;
}