Cod sursa(job #2292787)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 29 noiembrie 2018 23:10:16
Problema Bool Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <fstream>
#include <string>

using namespace std;

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

int N;
string s;
bool charVal[32];

bool EvalExp(int &p); ///ORs
bool Ands(int &p); ///ANDs
bool Nots(int &p); ///NOTs, Brackets, Letters, Constants

bool EvalExp(int &p)
{
    bool ans = Ands(p);

    while(s[p] == ' ' || (p < s.size() - 1 && (s[p] == 'O' && s[p] == 'R')))
    {
        if(s[p] == ' ')
            p++;
        else
        {
            p += 2;
            ans = ans | Ands(p);
        }
    }

    return ans;
}

bool Ands(int &p)
{
    bool ans = Nots(p);

    while(s[p] == ' ' || (p < s.size() - 2 && (s[p] == 'A' && s[p + 1] == 'N' && s[p + 2] == 'D')))
    {
        if(s[p] == ' ')
            p++;
        else
        {
            p += 3;
            ans = ans & Nots(p);
        }
    }

    return ans;
}

bool Nots(int &p)
{
    bool ans;

    while(s[p] == ' ')
        p++;

    if(s[p] == '(')
    {
        p++;
        ans = EvalExp(p);
        p++;
    }
    else if(p < s.size() - 2 && (s[p] == 'N' && s[p + 1] == '0' && s[p + 2] == 'T'))
    {
        p += 3;
        ans = !EvalExp(p);
    }
    else if(p < s.size() - 3 && (s[p] == 'T' && s[p + 1] == 'R' && s[p + 2] == 'U' && s[p + 3] == 'E'))
    {
        p += 4;
        ans = 1;
    }
    else if(p < s.size() - 4 && (s[p] == 'F' && s[p + 1] == 'A' && s[p + 2] == 'L' && s[p + 3] == 'S' && s[p + 4] == 'E'))
    {
        p += 5;
        ans = 0;
    }
    else
    {
        ans = charVal[s[p] - 'A'];
        p++;
    }

    return ans;
}

int main()
{
    fin >> s;
    fin.get();

    char c;
    fin >> N;
    for(int i = 1; i <= N; i++)
    {
        fin >> c;
        charVal[c - 'A'] = !charVal[c - 'A'];

        int p = 0;
        fout << EvalExp(p);
    }

    return 0;
}