Cod sursa(job #2851002)

Utilizator D4R1U5Sava Darius D4R1U5 Data 17 februarie 2022 22:11:01
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <bits/stdc++.h>

#define NMAX 1005

using namespace std;

ifstream f("bool.in");
ofstream g("bool.out");

char s[NMAX],s_cu_spatii[NMAX],c;
bool val[35];
int n,i,nr;

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

bool eval()
{
    bool r=termen();

    while (s[i]=='O' && s[i+1]=='R'){
        i+=2;
        r|=termen();
    }
    return r;
}

bool termen()
{
    bool r = factor();

    while(s[i]=='A' && s[i+1]=='N' && s[i+2]=='D'){
        i+=3;
        r&=factor();
    }
    return r;
}

bool factor()
{
    bool r;

    if (s[i]=='N' && s[i+1]=='O' && s[i+2]=='T'){
        i+=3;
        r=!factor();
    }
    else if (s[i]=='('){
             i++;
             r=eval();
             i++;
    }
    else if (s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E'){
             i+=4;
             r=true;
    }
    else if (s[i]=='F' && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S' && s[i+4]=='E'){
             i+=5;
             r=false;
    }
    else {
        ///variabila
        r=val[s[i]-'A'];
        i++;
    }
    return r;
}

int main()
{
    f.tie(nullptr);
    f.getline(s_cu_spatii,1005);
    for (int i=0;i<strlen(s_cu_spatii); i++){
        if (s_cu_spatii[i]!=' '){
            s[nr++]=s_cu_spatii[i];
        }
    }

    f>>n;
    for (int i=0;i<=26;i++){
        val[i]=false;
    }

    for (int j=1;j<=n;j++){
        f>>c;
        i=0;
        val[c-'A']=!val[c-'A'];
        g<<eval();
    }
    return 0;
}