Cod sursa(job #3140215)

Utilizator andiRTanasescu Andrei-Rares andiR Data 4 iulie 2023 19:16:14
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.03 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
const int Lmax=10001;

int pos, n;
char sir[Lmax];
bool v[27];
bool eval2(), eval3(), eval4();
bool eval1(){
    bool r=eval2();
    while (sir[pos]=='|'){
        pos++;
        r|=eval2();
    }
    return r;
}
bool eval2(){
    bool r=eval3();
    while (sir[pos]=='&'){
        pos++;
        r&=eval3();
    }
    return r;
}
bool eval3(){
    /*bool r=0;
    if (sir[pos]=='!'){
        pos++;
        r=!eval3();
    }
    else{
        r=eval4();
    }
    return r;*/
    bool no=0;
    while (sir[pos]=='!'){
        no=!no;
        pos++;
    }
    if (no==0)
        return eval4();
    else return !eval4();
}
bool eval4(){
    bool r=0;
    if (sir[pos]=='('){
        pos++;
        r=eval1();
    }
    else{
        if (sir[pos]=='0')
            r=0;
        else if (sir[pos]=='1')
            r=1;
        else if (sir[pos]>='A' && sir[pos]<='Z')
            r=v[sir[pos]-'A'];
    }
    pos++;
    return r;
}
int main()
{
    sir[0]=fin.get();
    while (sir[pos]!='\n'){
        if (pos>=2 && sir[pos]=='D' && sir[pos-1]=='N'){
            sir[pos-2]='&';
            pos-=2;
        }
        else if (pos>=1 && sir[pos]=='R' && sir[pos-1]=='O'){
            sir[pos-1]='|';
            pos--;
        }
        else if (pos>=2 && sir[pos]=='T' && sir[pos-1]=='O'){
            sir[pos-2]='!';
            pos-=2;
        }
        else if (pos>=3 && sir[pos]=='E' && sir[pos-1]=='U'){
            sir[pos-3]='1';
            pos-=3;
        }
        else if (pos>=4 && sir[pos]=='E' && sir[pos-1]=='S'){
            sir[pos-4]='0';
            pos-=4;
        }
        else if (sir[pos]==' '){
            pos--;
        }
        pos++;
        sir[pos]=fin.get();
    }
    fin>>n;
    char ch;
    for (int i=0; i<n; i++){
        fin>>ch;
        v[ch-'A']=!v[ch-'A'];
        pos=0;
        fout<<eval1();
    }
    return 0;
}