Pagini recente » Cod sursa (job #2526688) | Cod sursa (job #1740320) | Cod sursa (job #1223795) | Cod sursa (job #1066360) | Cod sursa (job #198120)
Cod sursa(job #198120)
#include<stdio.h>
#include<string.h>
char c[1010];
int s[1010],n,*p;
bool val[100];
bool eval();
bool factor()
{
bool r;
if(*p>0)
{
r=val[*p];
p++;
}
else
if(*p==-1)
{
p++;
r=!(factor());
}
else
if(*p==-5)
{
p++;
r=eval();
p++;
}
return r;
}
bool termen()
{
bool r=factor();
while(*p==-2)
{
p++;
r&=factor();
}
return r;
}
bool eval()
{
bool r=termen();
while(*p==-3)
{
p++;
r|=termen();
}
return r;
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
fgets(c,1010,stdin);
int lim=strlen(c)-1,acu=-1;
for(int i=0; i<lim; i++)
{
switch(c[i])
{
case 'F':
if(c[i+1]=='A')
{
s[++acu]=30;
i+=4;
}
else
s[++acu]=c[i]-'A'+1;
break;
case 'T':
if(c[i+1]=='R')
{
s[++acu]=31;
i+=3;
}
else
s[++acu]=c[i]-'A'+1;
break;
case 'N':
if(c[i+1]=='O')
{
s[++acu]=-1;
i+=2;
}
else
s[++acu]=c[i]-'A'+1;
break;
case 'A':
if(c[i+1]=='N')
{
s[++acu]=-2;
i+=2;
}
else
s[++acu]=c[i]-'A'+1;
break;
case 'O':
if(c[i+1]=='R')
{
s[++acu]=-3;
i++;
}
else
s[++acu]=c[i]-'A'+1;
break;
case '(':
s[++acu]=-5;
break;
case ')':
s[++acu]=-4;
break;
case ' ':
break;
default:
s[++acu]=c[i]-'A'+1;
}
}
val[31]=true;
scanf("%d\n",&n);
char aux;
for(int i=0; i<n; i++)
{
scanf("%c",&aux);
p=s;
if(val[aux-'A'+1])
val[aux-'A'+1]=0;
else
val[aux-'A'+1]=1;
printf("%d",eval() ? 1 : 0);
}
printf("\n");
return 0;
}