Cod sursa(job #2432195)

Utilizator PatrickCplusplusPatrick Kristian Ondreovici PatrickCplusplus Data 22 iunie 2019 14:59:58
Problema Bool Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <bits/stdc++.h>

using namespace std;

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

int z, n, v[300], p = 0;
char e[2009];
string x;

int eval();

int eval2();

int eval3();

void idk()
{
    while (e[p] == ' ')
        ++p;
}

int eval()
{
    int r = eval2();
    while (e[p] == 'O' && e[p + 1] == 'R')
    {
        p = p + 2;
        idk();
        if (e[p] == 'N' && e[p + 1] == 'O' && e[p + 2] == 'T')
        {
            p += 4;
            r |= (!eval2());
        }
        else
        {
            r |= eval2();
        }
    }
    return r;
}

int eval2()
{
    int r = eval3();
    while (e[p] == 'A' && e[p + 1] == 'N' && e[p + 2] == 'D')
    {
        p += 3;
        idk();
        if (e[p] == 'N' && e[p + 1] == 'O' && e[p + 2] == 'T')
        {
            p += 4;
            r &= (!eval3());
        }
        else
        {
            r &= eval3();
        }
    }
    return r;
}

int eval3()
{
    int r;
    if (e[p] == '(')
    {
        ++p;
        r = eval();
        ++p;
    }
    else if (e[p] == 'T' && e[p + 1] == 'R')
    {
        r = 1;
        p += 4;
        idk();
    }
    else if (e[p] == 'F' && e[p + 1] == 'A')
    {
        r = 0;
        p += 5;
        idk();
    }
    else if (e[p] >= 'A' && e[p] <= 'Z')
    {
        r = v[e[p]];
        ++p;
        idk();
    }
    return r;
}

int main()
{
    fin.get(e, 2001);
    fin >> n;
    fin >> x;
    for (int i = 1; i <= n; ++i)
    {
        v[x[i - 1]] = !v[x[i - 1]];
        p = 0;
        fout << eval();
    }
    fin.close();
    fout.close();
}