Cod sursa(job #1724923)

Utilizator radoneNeacsu Radu-Stefan radone Data 4 iulie 2016 16:12:36
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 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(  s2[p] == 'O' && s2[p+1] == 'R' ){
        p = p + 2;
        bool y = f2();
        if( x == true || y == true )
            x = true;
        else
            x = false;
    }

    return x;
}

bool f2()
{
    bool x;
    x = f3();
    while(s2[p] == 'A' && s2[p+1] == 'N' && s2[p+2] == 'D' ){
        p = p+3;
        bool y = f3();
        if( x == true && y == true )
            x = true;
        else x = false;
    }

    return x;
}

bool f3()
{
    bool x;

    if( 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(  s2[p] == 'T' && s2[p+1] == 'R' && s2[p+2] == 'U' && s2[p+3] == 'E' ){
            p = p+4;
            return true;
        }
    else if( 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'];
        p = 0;
        g<<f1();
    }

    return 0;
}