Cod sursa(job #2532216)

Utilizator Vlad_NituNitu Vlad-Petru Vlad_Nitu Data 27 ianuarie 2020 16:16:44
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("bool.in") ;
ofstream g ("bool.out") ;
bool eval() ;
bool termen() ;
bool factor() ;
int fv[40] , N  , cnt = 0  ;
char s[1005] , character;

bool eval()
{
    bool r = termen() ;

    while (s[cnt] == 'O' && s[cnt + 1] == 'R')
    {
        cnt += 3;
        r = (r|termen());
    }
    return r;
}
bool termen()
{
    bool r = factor() ;

    while (s[cnt] == 'A' && s[cnt+1] == 'N' && s[cnt+2] == 'D')
    {
        cnt += 4;
        r = (r&factor()) ;
    }

    return r;
}
bool factor()
{

    bool r ;

    if (s[cnt] == '(')
    {
        cnt ++ ;
        r = eval() ;
        cnt ++ ;
    }
    else if (s[cnt] == 'N' && s[cnt+1] == 'O' && s[cnt+2] == 'T')
    {
        cnt += 4;
        r = !factor();
    }
    else if (s[cnt] == 'T' && s[cnt+1] == 'R')
    {
        cnt += 5;
        r = true ;
    }
    else if (s[cnt] == 'F' && s[cnt+1] == 'A')
    {
        cnt += 6;
        r = false;
    }
    else
    {
        r = fv[s[cnt]-'A'] ;
        cnt += 2;
    }

    return r;
}
int main()
{
    f.getline(s,1005) ;
    f >> N ;
    f.get() ;
    for (int i = 1 ; i <= N ; ++i)
    {
        f >> character ;

        cnt = 0;
        fv[character - 'A'] = !fv[character - 'A'] ;
        g << eval() ;
    }
}