Cod sursa(job #2529985)

Utilizator mihai2003LLL LLL mihai2003 Data 24 ianuarie 2020 11:30:19
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <iostream>
#include <fstream>

std::ifstream in("bool.in");
std::ofstream out("bool.out");

char s[1005],a;
std::string aux,a2;
bool val[255];
int n,k;

int factor(),suma(),expresie();

int factor(){
    int valx=0;
    if(s[k]=='!'){
        k++;
        return !factor();
    }
    if(s[k]=='('){
        k++;
        valx=suma();
        k++;
        return valx;
    }
    if(isalpha(s[k])){
        valx=val[s[k]];
        k++;
        return valx;
    }
    if(s[k]=='1'){
        k++;
        return 1;
    }
    if(s[k]=='0'){
        k++;
        return 0;
    }

    return valx;
}

int suma(){
    bool val=expresie();
    while(s[k]=='|'){
        k++;
        val|=expresie();
    }
    return val;
}

int expresie(){
    bool val=factor();
    while(s[k]=='&'){
        k++;
        val&=factor();
    }
    return val;
}

int main(){
    std::getline(in,aux);
    for(int i=0;i<aux.size();i++)
        if(aux[i]=='A' && aux[i+1]=='N')
            a2+='&',i+=2;
        else
            if(aux[i]=='O' && aux[i+1]=='R')
                a2+='|',i++;
            else
                if(aux[i]=='N' && aux[i+1]=='O')
                    a2+='!',i+=2;
                else
                    if(aux[i]=='T' && aux[i+1]=='R' && aux[i+2]=='U' && aux[i+3]=='E')
                        a2+='1',i+=3;
                    else
                        if(aux[i]=='F' && aux[i+1]=='A' && aux[i+2]=='L' && aux[i+3]=='S' && aux[i+4]=='E')
                            a2+='0',i+=4;
                        else
                            if(aux[i]!=' ')
                                a2+=aux[i];
    sprintf(s,"%s",a2.c_str());
    std::cout<<s;
    in>>n>>std::ws;
    for(int i=0;i<255;i++)
        val[i]=0;
    for(int i=1;i<=n;i++){
        in>>a;
        k=0;
        val[a]=!val[a];
        out<<suma();
    }
    return 0;
}