Cod sursa(job #2716224)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 4 martie 2021 20:46:56
Problema Bool Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.07 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("bool.in");
ofstream fout("bool.out");

int evalLowPr();

char sir[1005];
int vals[27], i = 0;
string s, axx, modif;


int evalHighPr(){
    bool nu = false;
    int f;
    while(s[i] == '!'){
        ++i;
        nu = !nu;
    }
    if(s[i] == '('){
        ++i;
        f = evalLowPr();
        ++i;

        if(nu)
            return !f;
        return f;
    }
    else
    {
        bool vv;
        if(s[i] == '1' || s[i] == '0')
            vv = s[i] - '0';
        else vv = vals[s[i] - 'A'];
        ++i;
        if(nu)
            return !vv;
        return vv;
    }
}


int evalMidPr(){
    int f = evalHighPr();
    while(i < s.size()){
        if(s[i] == '&')
            ++i, f = (f && evalHighPr());
        else break;
    }
    return f;
}

int evalLowPr(){
    int t = evalMidPr();
    while(i < s.size()){
        if(s[i] == '|')
            ++i, t = (t || evalMidPr());
        else break;
    }

    return t;
}

int main()
{
    fin.getline(sir, 1001);
    char *p = strtok(sir, " ");
    while(p != NULL){
        int lg = strlen(p);
        int i = 0;
        while(i < lg){
            if(p[i] == '(')
                s += "(", ++i;
            else if(p[i] == ')')
                s += ")", ++i;
            else if(p[i] == 'T' && p[i + 1] == 'R')
                s += "1", i += 4;
            else if(p[i] == 'A' && p[i + 1] == 'N')
                s += '&', i += 3;
            else if(p[i] == 'N' && p[i + 1] == 'O')
                s += '!', i += 3;
            else if(p[i] == 'F' && p[i + 1] == 'A')
                s += '0', i += 5;
            else if(p[i] == 'O' && p[i + 1] == 'R')
                s += '|', i += 2;
            else s += p[i], ++i;
        }
        p = strtok(NULL, " ");
    }
    fin >> axx;
    fin >> modif;

    int n = modif.size();
    for(int ii = 0; ii < n; ++ii){
        vals[modif[ii] - 'A'] = 1 - vals[modif[ii] - 'A'];
        i = 0;
        fout << evalLowPr();
    }
    return 0;
}