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