Pagini recente » Cod sursa (job #2286563) | Cod sursa (job #2695) | Cod sursa (job #1233833) | Cod sursa (job #43737) | Cod sursa (job #396449)
Cod sursa(job #396449)
#include <stdio.h>
#define lmax 1005
char s [lmax], sp [lmax], *p;
int v [35];
inline bool lit (char c)
{
if (c >= 'A' && c <= 'Z')
return true;
return false;
}
void ceva ()
{
int i, k=-1;
for (i=0; s [i] ; ++i)
{
if (s [i] == ' ') continue;
if ((lit (s [i]) && (!lit (s [i+1]))) || (s [i] == '(') || (s [i] == ')'))
{ sp [++k]=s [i]; continue; }
if (s [i] == 'A')
{
sp [++k]='&';
i+=2;
continue;
}
if (s [i] == 'O')
{
sp [++k]='|';
++i;
continue;
}
if (s [i] == 'N')
{
sp [++k]='~';
i+=2;
continue;
}
if (s [i] == 'T')
{
sp [++k]='1';
i+=3;
continue;
}
if (s [i] == 'F')
{
sp [++k]='0';
i+=4;
}
sp [++k]=0;
}
}
int eval ();
int termen ()
{
int r, neg=0;
while (*p == '~')
{
neg=1-neg;
++p;
}
if (*p == '(')
{
r=eval ();
++p;
}
else
{
//fprintf(stderr, "%c %d\n", *p, v [(*p)-'A']);
if (*p == '1')
r=1;
if (*p == '0')
r=0;
if (lit (*p))
r=v [(*p)-'A'];
++p;
}
if (neg)
{
if (r)
r=0;
else
r=1;
}
if (r == 0)
return 0;
return 1;
}
int eval ()
{
int r=termen ();
//fprintf(stderr, "%d %s\n", r,p );
while (*p == '|' || *p == '&')
{
if (*p == '|')
r |= termen ();
else
r &= termen ();
++p;
}
if (r == 0)
return 0;
return 1;
}
int main ()
{
freopen ("bool.in", "r", stdin);
freopen ("bool.out", "w", stdout);
gets (s);
ceva ();
//fprintf(stderr, "%s\n", sp);
int i, n;
char c;
scanf ("%d ", &n);
for (i=1; i <= n; ++i)
{
scanf ("%c", &c);
// fprintf(stderr, "%c\n", c);
v [c-'A'] = 1 - v [c-'A'];//}
p=sp;
printf ("%d", eval ());
}
return 0;
}