Cod sursa(job #2690176)

Utilizator Edyci123Bicu Codrut Eduard Edyci123 Data 23 decembrie 2020 12:43:00
Problema Bool Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("bool.in");
ofstream g("bool.out");

char s[1006], * p;
bool v[135];

bool termen();
bool or1();
bool and1();

bool or1()
{
    while(*p == ' ')
        p++;
    bool rez = and1();
    while(*p == 'O' && *(p + 1) == 'R')
        p += 3, rez = rez | and1();
    return rez;
}

bool and1()
{
    while(*p == ' ')
        p++;
    bool rez = termen();
    while(*p == 'A' && *(p + 1) == 'N' && *(p + 2) == 'D')
        p += 4, rez = rez & termen();
    return rez;

}

bool termen()
{
    bool rez = 0;
    if(*p == 'N' && *(p + 1) == 'O' && *(p + 2) == 'T')
        p += 4, rez = !(or1());
    else
    {
        if(*p == '(' || *p == ' ')
            p++, rez = or1(), p += 2;
        else
        {
            if(isalpha(*p))
            {
                if(!isalpha(*(p+1)))
                {
                    rez = v[*p];
                    p += 2;
                }
                else if(*p == 'T')
                    rez = 1, p += 5;
                else
                    rez = 0, p += 6;
            }
        }
    }
    return rez;
}

int main()
{
    f.getline(s, 1005);
    int n;
    f >> n;
    for(int i = 1; i <= n; i++)
    {
        char c;
        f >> c;
        v[c] = !v[c];
        p = s;
        g << or1();
    }

    return 0;
}