Cod sursa(job #2512831)

Utilizator rebecca0312Andrei Rebecca rebecca0312 Data 21 decembrie 2019 18:44:37
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.94 kb
#include<fstream>
#include<cstring>
using namespace std;

int p;
char s[1010],mod;
bool val[300];

bool si();
bool dif();

bool sau(){
    bool aux=si();
    while(s[p]=='|'){
        p++;
        aux|=si();
    }
    return aux;
}

bool si(){
    bool aux=dif();
    while(s[p]=='&'){
        p++;
        aux&=dif();
    }
    return aux;
}

bool dif(){
    bool aux;
    if(s[p]=='1'){
        p++;
        return 1;
    }
    if(s[p]=='0'){
        p++;
        return 0;
    }
    while(s[p]=='!'){
        p++;
        return !dif();
    }
    if(s[p]=='('){
        p++;
        aux=sau();
        p++;
        return aux;
    }
    aux=val[s[p]];
    p++;
    return aux;
}

int main(){
    ifstream fin("bool.in");
    ofstream fout("bool.out");
    int m,n,j=0;
    fin.getline(s, 1010);
    n=strlen(s)-1;
    for(int i=0;i<=n;i++){
        if(s[i]=='A' && s[i+1]=='N' && s[i+2]=='D'){
            s[j]='&';
            i+=2;
            j++;
            continue;
        }
        if(s[i]=='O' && s[i+1]=='R'){
            s[j]='|';
            i+=1;
            j++;
            continue;
        }
        if(s[i]=='N' && s[i+1]=='O' && s[i+2]=='T'){
            s[j]='!';
            i+=2;
            j++;
            continue;
        }
        if(s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E'){
            s[j]='1';
            i+=3;
            j++;
            continue;
        }
        if(s[i]=='F' && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S' && s[i+4]=='E'){
            s[j]='0';
            j++;
            i+=4;
            continue;
        }
        if(s[i]==' ')
            continue;
        s[j]=s[i];
        j++;
    }
    s[j]='\0';
    s[j+1]='\0';
    fin>>m;
    for(int i=0;i<m;i++){
        fin>>mod;
        val[mod]=!val[mod];
        p=0;
        fout<<sau();
    }
    fin.close();
    fout.close();
    return 0;
}