Cod sursa(job #921830)

Utilizator DarkyAngelDarky Angel DarkyAngel Data 21 martie 2013 17:09:15
Problema Bool Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
#include <cstring>
#include <string>

using namespace std;

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

char ex[1024],*p=ex,ch[101];
bool val[27];

bool eval(),andex(),notex(),fact();

bool eval() {
    bool rez=andex();
    while(*p=='O'&&*(p+1)=='R') {
        p+=2;
        rez |= andex();
    }
    return rez;
}

bool andex() {
    bool rez=notex();
    while(*p=='A'&&*(p+1)=='N'&&*(p+2)=='D') {
        p+=3;
        rez &= notex();
    }
    return rez;
}

bool notex() {
    bool rez=fact();
    while(*p=='N'&&*(p+1)=='O'&&*(p+2)=='T') {
        p+=3;
        rez = fact();
        rez = (rez)?0:1;
    }
    return rez;
}

bool fact() {
    bool rez=0;
    if(*p=='(') {
        ++p;
        eval();
        ++p;
    } else {
        if(*p=='F'&&*(p+1)=='A'&&*(p+2)=='L'&&*(p+3)=='S'&&*(p+4)=='E')
            rez=0,p+=5;
        else if(*p=='T'&&*(p+1)=='R'&&*(p+2)=='U'&&*(p+3)=='E')
            rez=1,p+=4;
        else
            rez=val[*p];
    }
    return rez;
}

int main() {
    int n,i,t;
    char *c;
    f.getline(ex, 1024);
    f>>n>>ch;
    t=0;
    for(c=ex;c[0]!='\0';c++)
        if(isspace(c[0]))
            t++;
        else
            c[0-t]=c[0];
    c[-t]='\0';
    for(i=0;i<26;i++)
        val[i]=0;
    for(i=0;i<n;i++) {
        val[ch[i]]=(val[ch[i]]?0:1);
        g<<eval();
    }
}