Cod sursa(job #2469890)

Utilizator stefantagaTaga Stefan stefantaga Data 8 octombrie 2019 11:04:38
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char s[1005],c;
int i,fv[30],m,n,j;

bool termen();
bool factor();
bool eval();

bool termen()
{
    bool r=factor();
    while(s[i]=='|')
    {
        i++;
        r=(r|factor());
    }
    return r;
}
bool factor()
{
    bool r=eval();
    while(s[i]=='&')
    {
        i++;
        r=(r&eval());
    }
    return r;
}
bool eval()
{
    bool r;

    if(s[i]=='(')
    {
        i++;
        r=termen();
        i++;
    }
    else if(s[i]=='!')
    {
        i++;
        r=1-eval();
    }
    else if(s[i]=='1')
    {
        i++;
        r=1;
    }
    else if(s[i]=='0')
    {
        i++;
        r=0;
    }
    else
    {
        r=fv[s[i]-'A'+1];
        i++;
    }
    return r;
}
int main()
{
    f.getline(s,1005);
    i=0;
    while(i<strlen(s))
    {
        if(s[i]==' ')strcpy(s+i,s+i+1);
        i++;
    }
    i=0;
    while(i<strlen(s))
    {
        if(s[i]=='O'&&s[i+1]=='R')
        {
            s[i]='|';
            strcpy(s+i+1,s+i+2);
        }
        if(s[i]=='T'&&s[i+1]=='R'&&s[i+2]=='U'&&s[i+3]=='E')
        {
            s[i]='1';
            strcpy(s+i+1,s+i+4);
        }
        if(s[i]=='F'&&s[i+1]=='A'&&s[i+2]=='L'&&s[i+3]=='S'&&s[i+4]=='E')
        {
            s[i]='0';
            strcpy(s+i+1,s+i+5);
        }
        if(s[i]=='A'&&s[i+1]=='N'&&s[i+2]=='D')
        {
            s[i]='&';
            strcpy(s+i+1,s+i+3);
        }
        if(s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T')
        {
            s[i]='!';
            strcpy(s+i+1,s+i+3);
        }
        i++;
    }
    n=strlen(s);
    f>>m;
    for(j=1;j<=m;j++)
    {
        f>>c;
        fv[c-'A'+1]=1-fv[c-'A'+1];
        i=0;
        g<<termen();
    }
    return 0;
}