Cod sursa(job #625338)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 24 octombrie 2011 12:50:51
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include<stdio.h>

char a[1001],m[101],b[1001];
int nrc,val[27],p;

int factor();
int expresie();

int termen() {
    int semn = 1;
    while(b[p]==12)
    {
        semn = 1 - semn;
        p++;
    }
    if(b[p] == '(') {
        ++p;
        int r = expresie()-semn;
        ++p;
        return r;
    }
    if(b[p]>='A' && b[p]<='Z')
        return val[b[p]-'A'];
    return b[p];
}

int expresie() {
    int rez,r1;

    rez=factor(); ++p;

    while(b[p]==13) {
        ++p;
        rez|=factor();

    }

    return rez;
}

int factor() {
    int rez,r1;

    rez=termen();

    while(b[p]==11) {
        ++p;
        rez&=termen();
    }

    return rez;
}

void pars() {
    int i;

    for(i=0;a[i]!=0;++i) {

        if(a[i]=='A' && a[i+1]=='N') {
            b[p++]=11;
            i+=2;
            continue;
        }
        if(a[i]=='N' && a[i+1]=='O') {
            b[p++]=12;
            i+=2;
            continue;
        }
        if(a[i]=='O' && a[i+1]=='R') {
            b[p++]=13;
            i+=2;
            continue;
        }
        if(a[i]=='T' && a[i+1]=='R') {
            b[p++]=1;
            i+=3;
            continue;
        }
        if(a[i]=='F' && a[i+1]=='A') {
            b[p++]=0;
            i+=4;
            continue;
        }

        if((a[i]>='A' && a[i]<='Z') || (a[i]=='(' || a[i]==')'))
            b[p++]=a[i];
    }

}

int main() {
    int i;

    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);

    gets(a);
    scanf("%d\n",&nrc);
    scanf("%s",m);

    pars();
    p=0;

    for(i=0;i!=nrc;++i) {
        val[m[i]-'A']=1-val[m[i]-'A'];

        printf("%d",expresie());
    }

    return 0;
}