Pagini recente » Cod sursa (job #1864606) | Cod sursa (job #2661433) | Cod sursa (job #570802) | Cod sursa (job #1756654) | Cod sursa (job #632426)
Cod sursa(job #632426)
#include <stdio.h>
#include <string.h>
#define NMAX 1005
char A[NMAX], S[NMAX], *p = S;
bool val[27];
int sz;
bool AND(int); bool OR(int); bool NOT(int);
bool TRUE(int); bool FALSE(int);
int eval(); int factor(); int term();
bool AND(int pos)
{
return (A[pos] == 'A' && A[pos+1] == 'N'
&& A[pos+2] == 'D');
}
bool OR(int pos)
{
return (A[pos] == 'O' && A[pos+1] == 'R');
}
bool NOT(int pos)
{
return (A[pos] == 'N' && A[pos+1] == 'O'
&& A[pos+2] == 'T');
}
bool TRUE(int pos)
{
return (A[pos] == 'T' && A[pos+1] == 'R'
&& A[pos+2] == 'U' && A[pos+3] == 'E');
}
bool FALSE(int pos)
{
return (A[pos] == 'F' && A[pos+1] == 'A'
&& A[pos+2] == 'L' && A[pos+3] == 'S'
&& A[pos+4] == 'E');
}
void read()
{
fgets(A, NMAX, stdin);
int i, len = strlen(A);
for (i=0; i<len; ++i) {
if (AND(i)) {
S[sz++] = '&';
i += 2;
}
else if (OR(i)) {
S[sz++] = '|';
i += 1;
}
else if (NOT(i)) {
S[sz++] = '!';
i += 2;
}
else if (TRUE(i)) {
S[sz++] = '1';
i += 3;
}
else if (FALSE(i)) {
S[sz++] = '0';
i += 4;
}
else if (A[i] == ' ');
else
S[sz++] = A[i];
}
}
int eval()
{
int f = factor();
if (*p == '|')
while (*p == '|') {
++p;
f |= factor();
}
return f;
}
int factor()
{
int t = term();
if (*p == '&')
while (*p == '&') {
++p;
t &= term();
}
return t;
}
int term()
{
int r = 0;
if (*p == '(')
++p, r = eval(), ++p;
if (*p == '!')
++p, r = !term();
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()
{
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
read();
int n, i;
char c;
scanf("%d\n", &n);
for (i=0; i<n; ++i) {
scanf("%c", &c);
val[c-'A'] ^= 1;
p = S;
printf("%d", eval());
}
return 0;
}