Pagini recente » Cod sursa (job #1225097) | Cod sursa (job #2203797) | Cod sursa (job #60640) | Cod sursa (job #2443771) | Cod sursa (job #64805)
Cod sursa(job #64805)
#include <stdio.h>
#include <string.h>
#define NMAX 101
#define LMAX 1001
int N, v['Z'-'A'+1], i;
char e[LMAX], s[NMAX];
int evalp();
int eval();
int main() {
int j;
char c;
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
fgets(e, LMAX, stdin);
for (j = 0; e[j] != '\n'; ++j)
;
e[j] = NULL;
scanf("%d\n", &N);
for (j = 0; j < N; ++j) {
scanf("%c", &c);
i = 0, v[c - 'A'] = !v[c - 'A'];
//printf(" %d ", c - 'A');
printf("%d", evalp());
}
return 0;
}
int eval() {
if (e[i] == 'N' && e[i+1] == 'O') {
i += 4;
return !eval();
}
else if (e[i] == '(') {
++i;
return evalp();
}
else if (e[i] == 'T' && e[i+1] == 'R') {
i += 5;
return 1;
}
else if (e[i] == 'F' && e[i+1] == 'A') {
i += 6;
return 0;
}
else if (e[i] >= 'A' && e[i] <= 'Z') {
i += 2;
return v[e[i] - 'A'];
}
}
int evalp() {
int e1, e2;
e1 = eval();
//printf("e1 %d\n", e1);
//printf("i %d e[i] %c\n", i, e[i]);
if (e[i] == 'A' && e[i+1] == 'N') {
//printf("i %d\n", i);
i += 4;
e2 = eval();
i += 1;
return e1 && e2;
}
else if (e[i] == 'O' && e[i+1] == 'R') {
//printf("i %d e[i] %c\n", i, e[i]);
i += 3;
e2 = eval();
//printf("%d ", e2);
i += 1;
return e1 || e2;
}
else {
//printf("%d ", i);
i += 1;
return e1;
}
}