Cod sursa(job #2427875)

Utilizator FrostfireMagirescu Tudor Frostfire Data 2 iunie 2019 16:56:09
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>

using namespace std;

ifstream f("bool.in");
ofstream g("bool.out");

int n, i, a[100];
char s[1010], v[101];

int isOR();
int isAND();
int getVAR();

int isOR()
{
    int r = isAND();
    while(s[i] == 'O' && s[i+1] == 'R')
        {   i += 3;
            r = r | isAND();
        }
    return r;
}

int isAND()
{
    int r = getVAR();
    while(s[i] == 'A' && s[i+1] == 'N' && s[i+2] == 'D')
        {   i += 4;
            r = r & getVAR();
        }
    return r;
}

int getVAR()
{
    int r = 0;
    if(s[i] == '(')
        {   i++;
            r = isOR();
            i++;
        }
    else if(s[i] == 'N' && s[i+1] == 'O' && s[i+2] == 'T')
        {   i += 4;
            r = 1^getVAR();
        }
    else if(s[i] == 'T' && s[i+1] == 'R' && s[i+2] == 'U' && s[i+3] == 'E')
        {   i += 5;
            r = 1;
        }
    else if(s[i] == 'F' && s[i+1] == 'A' && s[i+2] == 'L' && s[i+3] == 'S' && s[i+4] == 'E')
        {   i += 6;
            r = 0;
        }
    else
        {   r = a[s[i]-'A'];
            i += 2;
        }
    return r;
}

int main()
{
    f.getline(s, 1000);
    f >> n;
    f.get();
    f >> v;

    for(int p=0; p<n; p++)
        {   i = 0;
            a[v[p]-'A'] = 1 - a[v[p]-'A'];
            g << isOR();
        }
    return 0;
}