Cod sursa(job #3240653)

Utilizator AndreiNicolaescuEric Paturan AndreiNicolaescu Data 19 august 2024 10:58:16
Problema Bool Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <fstream>

using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
int expresie(const string& s, int& p);
int termen(const string& s, int& p);
int factor(const string& s, int& p);
int variabila(const string& s, int& p);

int p = 0, n;
bool fr[127];
string s;

int expresie(const string& s, int& p)
{
    int result = termen(s, p);
    while(p+1 < (int)s.size() && (s[p] == 'O' && s[p+1] == 'R'))
    {
        p+=2;
        result = result | termen(s, p);
    }
    return result;
}
int termen(const string& s, int& p)
{
    int result = factor(s, p);
    while(p+2 < (int)s.size() && (s[p] == 'A' && s[p+1] == 'N' && s[p+2] == 'D'))
    {
        p+=3;
        result = result & factor(s, p);
    }
    return result;
}
int factor(const string& s, int& p)
{
    if(s[p] == '(')
    {
        p++;
        int result = expresie(s, p);
        p++;
        return result;
    }
    else
        if(p+2 < (int)s.size() && (s[p] == 'N' && s[p+1] == 'O' && s[p+2] == 'T'))
        {
            p+=3;
            return 1^variabila(s, p);
        }
        else
            return variabila(s, p);
}
int variabila(const string& s, int& p)
{
    if(p+3 < (int)s.size() && (s[p] == 'T' && s[p+1] == 'R' && s[p+2] == 'U' && s[p+3] == 'E'))
    {
        p+=4;
        return 1;
    }
    else
        if(p+4 < (int)s.size() && (s[p] == 'F' && s[p+1] == 'A' && s[p+2] == 'L' && s[p+3] == 'S' && s[p+4] == 'E'))
        {
            p+=5;
            return 0;
        }
        else
        {
            p++;
            return fr[(int)s[p-1]];
        }
}
int main()
{
    string x, val;
    getline(cin, x);
    for(unsigned int i=0; i<=x.size(); i++)
        if(x[i] != ' ')
            s.push_back(x[i]);
    cin >> n;
    cin >> val;
    for(unsigned int i=0; i<val.size(); i++)
    {
        if(fr[(int)val[i]] == 0)
            fr[(int)val[i]] = 1;
        else
            fr[(int)val[i]] = 0;
        p = 0;
        cout << expresie(s, p);
    }

    return 0;
}