Cod sursa(job #3193054)

Utilizator popuPop Matei Tudor popu Data 13 ianuarie 2024 21:31:35
Problema Bool Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

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

int poz,n;
bool f[260];
string s;
char x;
bool sau();
bool si();
bool nu();
bool solve();

bool sau()
{
    bool rez=si();

    if(s[poz]==' ')
        ++poz;
    while(s[poz]=='o')
    {
        poz+=2;
        rez|=si();
        if(s[poz]==' ')
            ++poz;
    }

    return rez;
}

bool si()
{
    bool rez=nu();

    if(s[poz]==' ')
        ++poz;
    while(s[poz]=='a')
    {
        poz+=3;
        rez&=nu();
        if(s[poz]==' ')
            ++poz;
    }

    return rez;
}

bool nu()
{
    bool rez=solve();

    if(s[poz]==' ')
        ++poz;
    while(s[poz]=='n')
    {
        poz+=3;
        rez=!solve();
        if(s[poz]==' ')
            ++poz;
    }

    return rez;
}

bool solve()
{
    bool rez=0;
    if(s[poz]==' ')
        ++poz;
    if(s[poz]=='t')
    {
        poz+=4;
        rez=1;
    }
    else if(s[poz]=='f')
    {
        poz+=5;
        rez=0;
    }
    else if(s[poz]=='(')
    {
        ++poz;
        rez=sau();
        ++poz;
    }
    else
    {
        rez=f[s[poz]];
        ++poz;
    }

    return rez;
}

int main()
{
    getline(fin,s);
    for(int i=0;s[i]!='\0';++i)
    {
        if(isalpha(s[i]) && isalpha(s[i+1]))
            s[i]=tolower(s[i]);
    }
    fin>>n;
    for(int i=1;i<=n;++i)
    {
        fin>>x;
        f[x]=!f[x];
        poz=0;
        fout<<sau();
    }
    return 0;
}