Pagini recente » Cod sursa (job #799350) | Cod sursa (job #1481459) | Cod sursa (job #448629) | Cod sursa (job #399284) | Cod sursa (job #398017)
Cod sursa(job #398017)
#include<stdio.h>
#include<string.h>
const int A=27,N=1005;
char c[N],v[N],*p=v;
int poz;
bool val[A];
bool AND(int i);
bool OR(int i);
bool NOT(int i);
bool FALSE(int i);
bool TRUE(int i);
int termen();
int factor();
void read()
{
gets(c);
int lim=strlen(c);
for( int i=0 ; i<lim ; ++i )
if( AND(i) )
{
v[poz++]='&';
i+=2;
}
else if( OR(i) )
{
v[poz++]='|';
i+=1;
}
else if( NOT(i) )
{
v[poz++]='!';
i+=2;
}
else if( TRUE(i) )
{
v[poz++]='1';
i+=3;
}
else if( FALSE(i) )
{
v[poz++]='0';
i+=4;
}
else if( c[i]==' ');
else
v[poz++]=c[i];
}
int eval()
{
int r=factor();
if(*p=='|')
{
p++;
r|=factor();
}
return r;
}
int factor()
{
int r=termen();
if(*p=='&')
{
p++;
r&=termen();
}
return r;
}
int termen()
{
int r=0;
if(*p=='(')
{
p++;
r=eval();
p++;
}
if(*p=='!')
{
p++;
r=!termen();
}
else if(*p=='1')
{
p++;
r=1;
}
else if(*p=='0')
{
p++;
r=0;
}
else if(*p>='A'&&*p<='Z')
{
r=val[*p-'A'];
p++;
}
return r;
}
int main()
{
int n;
char ch;
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
read();
scanf("%d\n",&n);
while(n--)
{
scanf("%c",&ch);
val[ch-'A']^=1;
p=v;
printf("%d",eval());
}
return 0;
}
bool AND(int i)
{
if( c[i]=='A'&&c[i+1]=='N'&&c[i+2]=='D')
return 1;
return 0;
}
bool OR(int i)
{
if( c[i]=='O' && c[i+1]=='R' )
return 1;
return 0;
}
bool NOT(int i)
{
if( c[i]=='N'&&c[i+1]=='O'&&c[i+2]=='T')
return 1;
return 0;
}
bool FALSE(int i)
{
if( c[i]=='F'&&c[i+1]=='A'&&c[i+2]=='L'&&c[i+3]=='S'&&c[i+4]=='E' )
return 1;
return 0;
}
bool TRUE(int i)
{
if( c[i]=='T'&&c[i+1]=='R'&&c[i+2]=='U'&&c[i+3]=='E')
return 1;
return 0;
}