Pagini recente » Cod sursa (job #1814252) | Cod sursa (job #1213289) | Cod sursa (job #2636995) | Cod sursa (job #2901542) | Cod sursa (job #293563)
Cod sursa(job #293563)
#include <stdio.h>
#define DIM 1005
#define ABC 30
char s[DIM],*p=s;
int a[ABC];
int n;
int eval ();
int termen ();
int factor ();
int operat ();
int main ()
{
freopen ("bool.in","r",stdin);
freopen ("bool.out","w",stdout);
char ch;
int i;
gets (s);
scanf ("%d\n",&n);
for (i=1; i<=n; ++i)
{
scanf ("%c",&ch);
a[ch-'A']^=1;
p=s;
printf ("%d",eval ());
}
return 0;
}
int eval ()
{
int r=termen ();
while (*p=='O' && *(p+1)=='R')
{
p+=3;
r|=termen ();
}
return r;
}
int termen ()
{
int r=operat ();
while (*p=='A' && *(p+1)=='N' && *(p+2)=='D')
{
p+=4;
r&=operat ();
}
return r;
}
int operat ()
{
int r=factor ();
if (*p=='N' && *(p+1)=='O' && *(p+2)=='T')
{
p+=4;
r=!factor ();
}
return r;
}
int factor ()
{
int r;
if (*p=='(')
{
++p;
r=eval ();
++p;
}
else if (*p=='N' && *(p+1)=='O' && *(p+2)=='T')
{
p+=4;
r=!factor ();
}
else if (*p=='T' && *(p+1)=='R' && *(p+2)=='U' && *(p+3)=='E')
{
p+=5;
r=1;
}
else if (*p=='F' && *(p+1)=='A' && *(p+2)=='L' && *(p+3)=='S' && *(p+4)=='E')
{
p+=6;
r=0;
}
else
{
r=a[*p-'A'];
p+=2;
}
return r;
}