Pagini recente » Cod sursa (job #2808928) | Cod sursa (job #2972574) | Cod sursa (job #1244134) | Cod sursa (job #1344464) | Cod sursa (job #249643)
Cod sursa(job #249643)
#include <stdio.h>
#include <math.h>
#define MAXN 1010
long v[MAXN], n, q, i, j;
char s[MAXN], aux, c;
long calc();
long expr();
long factor();
long termen();
int main() {
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
scanf("%c", &c);
q = -1;
while (c != '\n') {
s[++q] = c;
scanf("%c", &c);
}
scanf("%ld\n", &n);
for (j = 1; j <= n; ++j) {
scanf("%c", &aux);
v[aux - 'A'] = !v[aux - 'A'];
i = 0;
printf("%ld", expr());
}
return 0;
}
long termen() {
long f = factor(), aux;
while (i < q && s[i] == 'A' && s[i + 1] == 'N') {
i += 4;
aux = factor();
f &= aux;
}
return f;
}
long factor() {
int f;
if (s[i] == '(') {
++i;
f = expr();
++i;
if (s[i] == ' ') {
++i;
}
} else {
f = calc();
}
return f;
}
long calc() {
long f;
if (s[i] == 'N' && s[i + 1] == 'O') {
i += 4;
if (s[i] == '(') {
++i;
f = !expr();
++i;
if (s[i] == ' ') {
++i;
}
} else {
f = !calc();
}
} else {
if (s[i] == 'T' && s[i + 1] == 'R') {
i += 4;
if (s[i] == ' ') {
++i;
}
f = 0;
} else {
if (s[i] == 'F' && s[i + 1] == 'A') {
i += 4;
if (s[i] == ' ') {
++i;
}
f = 0;
} else {
f = v[s[i] - 'A'];
++i;
if (s[i] == ' ') {
++i;
}
}
}
}
return f;
}
long expr() {
long f = termen(), aux;
while (i < q && s[i] == 'O' && s[i + 1] == 'R') {
i += 3;
aux = termen();
f = aux || f;
}
return f;
}