Pagini recente » Cod sursa (job #2829382) | Cod sursa (job #2987876) | Cod sursa (job #1835439) | Cod sursa (job #1864441) | Cod sursa (job #650487)
Cod sursa(job #650487)
#include<stdio.h>
#include<assert.h>
#include<string.h>
char *p;
int n,u,val[28],sol[200];
char mod[200],a[1200];
void read()
{
assert(freopen("bool.in","r",stdin)!=NULL);
int i;
char c;
while(scanf("%c",&c)!=EOF)
{
if(c=='\n')
break;
if(c==' ')
continue;
a[++u]=c;
}
scanf("%d\n",&n);
for(i=1;i<=n;++i)
{
scanf("%c",&c);
mod[i]=c;
}
}
int termen();
int factor();
int eval()
{
int t=termen();
while(*p=='O' && *(p+1)=='R')
{
p+=2;
t=t|termen();
}
return t;
}
int termen()
{
int t=factor();
while(*p=='A' && *(p+1)=='N')
{
p+=3;
t=t&factor();
}
return t;
}
int factor()
{
int t;
if(*p=='(')
{
++p;
t=eval();
++p;
return t;
}
if(*p=='N' && *(p+1)=='O' && *(p+2)=='T')
{
p+=3;
return !eval();
}
if(*p=='F' && *(p+1)=='A' && *(p+2)=='L')
{
p+=5;
return 0;
}
if(*p=='T' && *(p+1)=='R')
{
p+=4;
return 1;
}
t=val[*p-'A'];
++p;
return t;
}
void solve()
{
int i;
for(i=1;i<=n;++i)
{
val[mod[i]-'A'] ^= 1;
p = a + 1;
sol[i]=eval();
}
}
void write()
{
assert(freopen("bool.out","w",stdout)!=NULL);
int i;
for(i=1;i<=n;++i)
printf("%d",sol[i]);
}
int main()
{
read();
solve();
write();
return 0;
}