Pagini recente » Cod sursa (job #981196) | Cod sursa (job #1791740) | Cod sursa (job #2010500) | Cod sursa (job #2060890) | Cod sursa (job #200300)
Cod sursa(job #200300)
#include <stdio.h>
#include <string.h>
#define N 1001
char s[N];
int v[N],p=1,f[27]={0};
int AND();
int NOT();
int factor();
int OR(){
int r=AND();
while(v[p]==2){
++p;
if(r || AND())
r=1;
else r=0;
}
return r;
}
int AND(){
int r=NOT();
while(v[p]==1){
++p;
if(r && NOT())
r=1;
else r=0;
}
return r;
}
int NOT(){
int r=-1;
while(v[p]==0){
++p;
if( factor() ) r=0;
else r=1;
}
if(r==-1) r=factor();
return r;
}
int factor(){
int r=0;
if(v[p]==5){
p++;
r=OR();
p++;
}
else {
if(v[p]==3) r=1;
if(v[p]==4) r=0;
if(v[p]>=(int)'A' && v[p]<=(int)'Z') r=f[v[p]-(int)'A'];
p++;
}
return r;
}
int main(){
int i,l,n;
char x;
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
fgets(s,N,stdin);
l=strlen(s);
l--;
for(i=0;i<l;i++){
if(s[i]=='F'){
if(s[i+1]=='A') v[++v[0]]=4,i+=4;
else v[++v[0]]=(int)'F';
}
else if(s[i]=='T'){
if(s[i+1]=='R') v[++v[0]]=3,i+=3;
else v[++v[0]]=(int)'T';
}
else if(s[i]=='A'){
if(s[i+1]=='N') v[++v[0]]=1,i+=2;
else v[++v[0]]=(int)'A';
}
else if(s[i]=='N'){
if(s[i+1]=='O') v[++v[0]]=0,i+=2;
else v[++v[0]]=(int)'N';
}
else if(s[i]=='O'){
if(s[i+1]=='R') v[++v[0]]=2,i+=1;
else v[++v[0]]=(int)'O';
}
else if(s[i]=='(') v[++v[0]]=5;
else if(s[i]==')') v[++v[0]]=6;
else if(s[i]>='A' && s[i]<='Z') v[++v[0]]=(int)s[i];
}
scanf("%d\n",&n);
for(i=1;i<=n;i++){
scanf("%c",&x);
if (f[(int)x-'A']) f[(int)x-'A']=0;
else f[(int)x-'A']=1;
p=1;
printf("%d",OR());
}
}