Cod sursa(job #1027779)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 13 noiembrie 2013 01:08:23
Problema Bool Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<cstdio>
#include<cstring>
int n,i,j,v[28];
char s[1010],c;
int op2();
int op3();
int op1(){
    int r=op2();
    if(s[j]=='O'&&s[j+1]=='R'){
        j+=2;
        r|=op2();
    }
    return r;
}
int op2(){
    int r=op3();
    if(s[j]=='A'&&s[j+1]=='N'&&s[j+2]=='D'){
        j+=3;
        r&=op3();
    }
    return r;
}
int op3(){
    int r;
    if(s[j]=='('){
        j++;
        r=op1();
        return r;
    }
    if(s[j]=='N'&&s[j+1]=='O'&&s[j+2]=='t'){
            j+=3;
            return !op3();
    }
    if(s[j]=='T'&&s[j+1]=='R'&&s[j+2]=='U'&&s[j+3]=='E'){
        j+=4;
        return 1;
    }
    if(s[j]=='F'&&s[j+1]=='A'&&s[j+2]=='L'&&s[j+3]=='S'&&s[j+4]=='e'){
        j+=5;
        return 0;
    }
    j++;
    return v[s[j-1]-'A'];
}
FILE *f,*g;
int main(){
    f=fopen("bool.in","r");
    g=fopen("bool.out","w");
    fgets(s,2000,f);
    fscanf(f,"%d\n",&n);
    for(i=0;i<n;i++){
        fscanf(f,"%c",&c);
        v[c-'A']=v[c-'A']^1;
        j=0;
        fprintf(g,"%d",op1());
    }
    fclose(f);
    fclose(g);
    return 0;
}