Cod sursa(job #2376595)

Utilizator Vlad_NituNitu Vlad-Petru Vlad_Nitu Data 8 martie 2019 16:36:16
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bool.in") ;
ofstream g ("bool.out") ;
char s[1005] ;
int N , i , j ;
char x;
int fv[250] ;
bool eval();
bool termen() ;
bool factor() ;
bool eval()
{
bool r = termen();
while (s[j] == 'O' && s[j+1] == 'R')
{
    j += 3;
    r = (r|termen());
}
return r;
}
bool termen()
{
bool r = factor();
while (s[j] == 'A' && s[j+1] == 'N' && s[j+2] == 'D')
{
    j += 4;
    r = (r&factor());
}
return r;
}
bool factor()
{
    bool r;
    if (s[j] == '(')
    j ++ , r = eval() , j ++ ;

        else if (s[j] == 'N' && s[j+1] == 'O' && s[j+2] == 'T')
        {
            j += 4;
            r = !factor();
        }
else if (s[j] == 'T' && s[j+1] == 'R' && s[j+2] == 'U' && s[j+3] == 'E')
        {
        j += 5;
        r = true;
        }
else if (s[j] == 'F' && s[j+1] == 'A' && s[j+2] == 'L' && s[j+3] == 'S' && s[j+4] == 'E')
        {
            j += 6 ;
            r = false;
        }
        else r = fv[s[j]-'A' + 1] , j += 2;

    return r;
}
int main()
{
    f.getline(s,1003);
    f >> N ;
    f.get();
    for (i = 1 ; i <= N ; ++i)
    {
        f >> x;
        j = 0;
        fv[x-'A'+1] = !fv[x-'A'+1];
        g << eval() ;
    }
    f.close();
    g.close();
    return 0 ;
}