Cod sursa(job #721615)

Utilizator ion824Ion Ureche ion824 Data 23 martie 2012 21:11:24
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<cstdio>
char a[1005],modif[105]; bool lit[30]; int i;

bool factor2();
bool factor();

bool ff(){
 bool v=factor();   
   while(a[i]=='O' && a[i+1]=='R'){ i+=2; if(a[i]==' ')++i; v|=factor(); }        
  return v;  
}

bool factor(){
 bool v=factor2();
   while(a[i]=='A' && a[i+1]=='N'){ i+=3; if(a[i]==' ')++i; v&=factor2(); }      
 return v;   
}

bool factor2(){
 bool v=0;
   if(a[i]=='('){ ++i; v=ff(); ++i; if(a[i]==' ')++i; }
      else
        if(a[i]=='N' && a[i+1]=='O'){ i+=3; if(a[i]==' ')++i; v=!factor2(); }
          else if(a[i]=='T' && a[i+1]=='R'){ i+=4; if(a[i]==' ')++i; v=1; }
            else if(a[i]=='F' && a[i+1]=='A'){ i+=5; if(a[i]==' ')++i; v=0; }
              else if(a[i]<='Z' && a[i]>='A'){ v=lit[a[i]-'A']; ++i; if(a[i]==' ')++i; }
  return v;
}

int main(void){
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    int n,j;
    gets(a);
    scanf("%d\n",&n);
    gets(modif);
    for(j=0;j<n;++j){
                 lit[modif[j]-'A']=!lit[modif[j]-'A'];
                 i=0;
                 printf("%d",ff());
                     }
 return 0;
}