Cod sursa(job #2457464)

Utilizator Ionut28Porumb Palincas Ionut Ionut28 Data 17 septembrie 2019 20:23:29
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <bits/stdc++.h>

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

const int nmax = 1005;
int n, val[60], p;
char expresie[nmax + 5], v[110];

bool isOr();
bool isAnd();
bool getvar();

bool isOr()
{
    bool r = isAnd();
    while(expresie[p] == 'O' && expresie[p + 1] == 'R')
    {
        p += 3;
        r = r|isAnd();
    }
    return r;
}

bool isAnd()
{
    bool r = getvar();
    while(expresie[p] == 'A' && expresie[p + 1] == 'N' && expresie[p + 2] == 'D')
    {
        p += 4;
        r = r&getvar();
    }
    return r;
}

bool getvar()
{
    bool r = false;
    if(expresie[p] == 'N' && expresie[p + 1] == 'O' && expresie[p + 2] == 'T')
    {
        p += 4;
        r = !getvar();
    }
    else if(expresie[p] == '(')
    {
        p++;
        r = isOr();
        p++;
    }
    else if(expresie[p] == 'T' && expresie[p + 1] == 'R' && expresie[p + 2] == 'U' && expresie[p + 3] == 'E')
    {
        p += 5;
        r = true;
    }
    else if(expresie[p] == 'F' && expresie[p + 1] == 'A' && expresie[p + 2] == 'L' && expresie[p + 3] == 'S' && expresie[p + 4] == 'E')
    {
        p += 6;
        r = false;
    }
    else
    {
        r = val[expresie[p] - 'A'];
        p += 2;
    }
    return r;
}
int main()
{
    fin.get(expresie, nmax + 5);
    fin >> n;
    fin.get();
    fin.get(v, 105);
    for(unsigned int i = 0; i < strlen(v); ++i)
    {
        val[v[i] - 'A'] = 1 -  val[v[i] - 'A'];
        p = 0;
        fout << isOr();
    }
    fin.close();
    fout.close();
    return 0;
}