Pagini recente » Cod sursa (job #3142386) | Cod sursa (job #60434) | Cod sursa (job #1673680) | Cod sursa (job #1673665) | Cod sursa (job #65169)
Cod sursa(job #65169)
#include <stdio.h>
#include <string.h>
#define NMAX 1001
char e[NMAX];
int N, k, v['Z'-'A'+1];
int evalf();
int evalt();
int evale();
int main() {
int i;
char c;
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
fgets(e, NMAX, stdin);
//printf("%d ", strlen(e));
scanf("%d\n", &N);
for (i = 0; i < N; ++i) {
scanf("%c", &c);
k = 0, v[c-'A'] = !v[c-'A'];
printf("%d", evale());
}
//printf("%d ", evale());
//printf("%d", k);
return 0;
}
int evalf() {
if (e[k] == '(') {
++k;
return evale();
}
else if (e[k] == 'N' && e[k+1] == 'O') {
k += 4;
return !evalf();
}
else if (e[k] == 'T' && e[k+1] == 'R') {
k += 4;
if (e[k] == ' ')
++k;
return 1;
}
else if (e[k] == 'F' && e[k+1] == 'A') {
k += 5;
if (e[k] == ' ')
++k;
return 0;
}
else {
int r = v[e[k]-'A'];
++k;
if (e[k] == ' ')
++k;
return r;
}
}
int evalt() {
int r = evalf();
while (e[k] == 'A' && e[k+1] == 'N') {
k += 4;
r &= evalf();
}
return r;
}
int evale() {
int r = evalt();
while (e[k] == 'O' && e[k+1] == 'R' && e[k] && e[k] != ')') {
k += 3;
r |= evalt();
}
++k;
if (e[k] == ' ')
++k;
//printf("%d %d %c\n", k, r, e[k]);
return r;
}