Cod sursa(job #1027780)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 13 noiembrie 2013 01:16:43
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<cstdio>
#include<cstring>
int n,i,j,v[40],u;
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(){
    if(s[j]=='('){
        ++j;
        int r=op1();
        ++j;
        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");
    while (1)
     {
       scanf("%c", &c);
       if (c==' ') continue;
       if(c == '\n') break;
       s[u++] = c;
     }
    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;
}