Pagini recente » Cod sursa (job #530012) | Cod sursa (job #2223241) | Cod sursa (job #3290354) | Cod sursa (job #1886733) | Cod sursa (job #1557925)
#include<cstdio>
#include<cstring>
char s[1007],s1[1007],vc[1001],c;
int i=-1,j,n,m,pp,v[27],cate;
int eval();
int eval1();
int eval2();
int main ()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
gets(s1);
n=strlen(s1);
scanf("%d",&m);
scanf("%c",&c);
for(i=1;i<=m;i++)
scanf("%c",&vc[i]);
for(i=0;i<n;i++)
{
if(s1[i]=='N'&&s1[i+1]=='O'&&s1[i+2]=='T')
{
s[++cate]='!';
i+=2;
}
else
if(s1[i]=='A'&&s1[i+1]=='N'&&s1[i+2]=='D')
{
s[++cate]='&';
i+=2;
}
else
if(s1[i]=='O'&&s1[i+1]=='R')
{
s[++cate]='|';
i++;
}
else
if(s1[i]=='F'&&s1[i+1]=='A')
{
s[++cate]='0';
i+=4;
}
else
if(s1[i]=='T'&&s1[i+1]=='R')
{
s[++cate]='1';
i+=3;
}
else
if(s1[i]!=' ')
s[++cate]=s1[i];
}
for(j=1;j<=m;j++)
{
v[vc[j]-'A']=1-v[vc[j]-'A'];
int nr=-1;
for(i=1;i<cate;)
{
if(s[i]>='A'&&s[i]<='Z')
{
if(pp==0)
nr=v[s[i]-'A'];
else
nr=1-v[s[i]-'A'];
i++;
}
if(s[i]>='0'&&s[i]<='1')
{
if(pp==0)
nr=s[i]-'0';
else
nr=1-(s[i]-'0');
i++;
}
if(s[i]=='|')
nr=nr|eval();
if(s[i]=='&')
nr=nr&eval();
if(s[i]=='!')
pp=1;
if(s[i]=='(')
nr=eval2();
while(s[i]==')')
i++;
}
printf("%d",nr);
}
return 0;
}
int eval()
{
i++;
int nr=-1;
int pp=0;
if(s[i]=='!')
{
pp=1;
i++;
}
if(s[i]>='A'&&s[i]<='Z')
{
if(pp==0)
nr=v[s[i]-'A'];
else
nr=1-v[s[i]-'A'];
i++;
}
if(s[i]>='0'&&s[i]<='1')
{
if(pp==0)
nr=s[i]-'0';
else
nr=1-(s[i]-'0');
i++;
}
if(s[i]=='(')
if(pp==0)
return eval2();
else
return 1-eval2();
else
return nr;
}
int eval2()
{
i++;
int nr=-1;
while(s[i]!=')')
{
if(s[i]>='A'&&s[i]<='Z')
{
if(pp==0)
nr=v[s[i]-'A'];
else
nr=1-v[s[i]-'A'];
i++;
}
if(s[i]>='0'&&s[i]<='1')
{
if(pp==0)
nr=s[i]-'0';
else
nr=1-(s[i]-'0');
i++;
}
if(s[i]=='|')
nr=nr|eval();
if(s[i]=='&')
nr=nr&eval();
if(s[i]=='!')
pp=1;
if(s[i]=='(')
nr=eval2();
}
i++;
return nr;
}