Cod sursa(job #1669966)

Utilizator Mr.RobotElliot Alderson Mr.Robot Data 31 martie 2016 12:16:13
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;

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

char s1[1010],s2[1010],c;
bool  b[27];
int n, k, p,l;

bool f1();
bool f2();
bool f3();

bool f1()
{
    bool x;
    x = f2();

    while( p+1<k && s2[p] == 'O' && s2[p+1] == 'R' ){
        p = p + 2;
        x = x|f2();
    }

    return x;
}

bool f2()
{
    bool x;
    x = f3();
    while( p+2<k && s2[p] == 'A' && s2[p+1] == 'N' && s2[p+2] == 'D' ){
        p = p+3;
        x = x&f3();
    }

    return x;
}

bool f3()
{
    bool x;

    if( p+2<k && s2[p] == 'N' && s2[p+1] == 'O' && s2[p+2] == 'T'){
        p = p+3;
        return !f3();
    }
    else if( s2[p] == '(' ){
        p++;
        x = f1();
        p++;
    }
    else if( p+3<k && s2[p] == 'T' && s2[p+1] == 'R' && s2[p+2] == 'U' && s2[p+3] == 'E' ){
            p = p+4;
            return true;
        }
    else if( p+4<k && s2[p] == 'F' && s2[p+1] == 'A' && s2[p+2] == 'L' && s2[p+3] == 'S' && s2[p+4] == 'E' ){
            p = p + 5;
            return false;
    }
    else{
        x = b[s2[p]-'A'];
        p++;
    }
    return x;
}
int main()
{
    f.get(s1, 1000);
    f.get();

    l = strlen(s1);
    for( int i = 0; i < l; i ++ )
        if( s1[i] != ' ' )
            s2[k++] = s1[i];
    s2[k] = '\0';

    for( int i = 0; i < 26; i ++ )
        b[i] = false;
    f >> n;
    for( int i = 0; i < n; i ++ ){
        f >> c;
        b[c - 'A'] = !b[c - 'A'];
        g<<f1();
    }

    return 0;
}