Mai intai trebuie sa te autentifici.

Cod sursa(job #2742468)

Utilizator Razvan48Capatina Razvan Nicolae Razvan48 Data 20 aprilie 2021 23:29:47
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <fstream>
#include <string>

using namespace std;

const int SIGMA = 26;

int poz;
string linie;

bool val[SIGMA];

bool si();
bool paranteze();

bool sau()
{
    bool sol = si();

    while (linie[poz] == 'O' && linie[poz + 1] == 'R')
    {
        poz += 3;
        sol = sol | si();
    }

    return sol;
}

bool si()
{
    bool sol = paranteze();

    while (linie[poz] == 'A' && linie[poz + 1] == 'N' && linie[poz + 2] == 'D')
    {
        poz += 4;
        sol = sol & paranteze();
    }

    return sol;
}

bool paranteze()
{
    bool sol;

    if (linie[poz] == '(')
    {
        poz++;

        sol = sau();

        poz++;
    }
    else if (linie[poz] == 'N' && linie[poz + 1] == 'O' && linie[poz + 2] == 'T')
    {
        poz += 4;

        sol = !paranteze();
    }
    else if (linie[poz] == 'T' && linie[poz + 1] == 'R' && linie[poz + 2] == 'U' && linie[poz + 3] == 'E')
    {
        poz += 5;

        sol = true;
    }
    else if (linie[poz] == 'F' && linie[poz + 1] == 'A' && linie[poz + 2] == 'L' && linie[poz + 3] == 'S' && linie[poz + 4] == 'E')
    {
        poz += 6;

        sol = false;
    }
    else
    {
        sol = val[linie[poz] - 'A'];

        poz += 2;
    }

    return sol;
}

int main()
{
    ifstream in("bool.in");
    ofstream out("bool.out");

    getline(in, linie);

    int n;
    in >> n;

    for (int i = 1; i <= n; i++)
    {
        char c;

        in >> c;

        val[c - 'A'] = !val[c - 'A'];

        poz = 0;

        out << sau();
    }

    return 0;
}