Cod sursa(job #2816368)

Utilizator clara123Ghira Clara clara123 Data 11 decembrie 2021 12:07:55
Problema Bool Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.83 kb
#include<fstream>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int i,j,k,ok,n,x,y,pp;
char a[1001],v[1001],nr;
int pM();
int p();
int pm();
int pm() {
    int x=pM();
    while(v[i]=='&' || v[i]=='|' ){
        if(v[i]=='&'){
            i++;
            x&=pM();
        }
        else{
            i++;
            x|=pM();
        }
    }
    return x;
}
int pM(){
    int x=p();
    while(v[i]=='~'){
        i++;
        x=!(p());

    }
    return x;
}
 int p(){
    int x=0;
    if(v[i]=='('){
        i++;
        x=pm();
        i++;
    }
    else{
        if(v[i]=='t'){
            x=1;
            i++;
        }
        if(v[i]=='f'){
            x=0;
            i++;
        }
    }
    return x;
}

int main(){
    fin.getline(a, 1010);
    k=0;
    j=0;
    while(a[k]!=0){
        ok=0;
        if(a[k]=='A'){
            if(a[k+1]=='N'){
                k+=3;
                v[j]='&';
                j++;
                ok=1;
            }
        }
        if(a[k]=='O')
            if(a[k+1]=='R'){
                k+=2;
                v[j++]='|';
                ok=1;
            }
        if(a[k]=='N')
            if(a[k+2]=='T'){
                k+=3;
                v[j++]='~';
                ok=1;
        }
        if(a[k]=='T' && a[k+1]=='R'){
            k+=4;
            v[j++]='t';
        }
        if(a[k]=='F' && a[k+1]=='A'){
            k+=5;
            v[j++]='f';
        }
        if(ok==0){
            v[j++]=a[k];
            k++;
        }
    }
    pp=j;
    fin>>n;
    for(k=1;k<=n;k++){
        fin>>nr;
        i=0;
        for(j=0;j<=pp;j++){
            if(v[j]==nr){
                v[j]=(~v[j]);
            }

        }
        i=0;
        fout<<pm();
    }


    return 0;
}