Cod sursa(job #2473596)

Utilizator hurjui12AlexandruHurjui Alexandru-Mihai hurjui12Alexandru Data 13 octombrie 2019 21:22:14
Problema Bool Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.09 kb
#include <fstream>
#include <cstring>
using namespace std;

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

//NOT > AND > OR

bool v[128];
char x[1005];
int i, lg;

bool sau();
bool si();
bool var();

bool var()
{
    bool r;
    if (x[i] == '(')
    {
        i++;
        r = sau();
        i++;
    }
    else if (x[i] == '!')
    {
        bool sch = 0;
        while (x[i] == '!')
        {
            i++;
            sch = !sch;
        }
        r = var();
        if (sch == 1)
            r = !r;
    }
    else if (isalpha(x[i]))
    {
        r = v[x[i]];
        //fout << r << x[i];
        i++;
    }
    else if (x[i] == '0')
        r = 0;
    else
        r = 1;
    return r;
}

bool si()
{
    bool r = var();
    while (i<lg && x[i] == '&')
    {
        i++;
        r = r & var();
    }
    return r;
}

bool sau()
{
    bool r = si();
    while (i<lg && x[i] == '|')
    {
        i++;
        r = r | var();
    }
    return r;
}

int main()
{
    int n, k;
    char c[101], buff[1010] = {};
    fin.getline(buff, sizeof(buff));
    fin >> n >> c;
    for (i = 0; i<strlen(buff); i++)
    {
        if (isalpha(buff[i]))
        {
            if (buff[i+1] == 'N')
            {
                //AND
                x[lg++] = '&';
                i = i+2;
            }
            else if (buff[i+1] == 'R')
            {
                if (buff[i+2] == 'U')
                {
                    x[lg++] = '1';
                    i=i+3;
                }
                else
                {
                    x[lg++] = '|';
                    i++;
                }
            }
            else if (buff[i+1] == 'O')
            {
                //NOT
                x[lg++] = '!';
                i = i+2;
            }
            else if (buff[i+1] == 'A')
            {
                x[lg++] = '0';
                i = i+4;
            }
            else
                x[lg++] = buff[i];
        }
        else if (buff[i] != ' ')
            x[lg++] = buff[i];
    }
    for (k = 0; k<n; k++)
    {
        v[c[k]] = !v[c[k]];
        i = 0;
        fout << sau();
    }
    return 0;
}