Pagini recente » Cod sursa (job #377859) | Cod sursa (job #965048) | Cod sursa (job #2627033) | Cod sursa (job #770750) | Cod sursa (job #914658)
Cod sursa(job #914658)
#include <cstdio>
#include <cstring>
using namespace std;
char buffer[1005];
char buf[1005];
int val[256];
int id,len;
int eand();
int eor();
int eval();
int eor() {
bool r1,r2;
r1 = eand();
while (buf[id] == '|') {
id++;
r2 = eand();
r1 = r1|r2;
}
return r1;
}
int eand() {
bool r1,r2;
r1 = eval();
while (buf[id] == '&') {
id++;
r2 = eval();
r1 = r1&r2;
}
return r1;
}
int eval() {
bool notted = false;
bool r = false;
while (buf[id] == '!') {
notted = !notted;
id++;
}
if (buf[id] == '(') {
id++;
r = eor();
id++;
} else if ('A' <= buf[id] && buf[id] <= 'Z') {
r = val[buf[id++]];
} else if (buf[id++] == 1) r = true;
else if (buf[id++] == 0) r = false;
if (notted) return !r;
else return r;
}
int main() {
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
fgets(buffer,1005,stdin);
len = strlen(buffer);
for (int i=0;i<len;i++) {
if ('A' <= buffer[i] && buffer[i] <= 'Z' && (buffer[i+1] < 'A' || buffer[i+1] > 'Z')) {
buf[id++] = buffer[i];
continue;
}
if (buffer[i] == 'A' && buffer[i+1] == 'N' && buffer[i+2] == 'D') {
buf[id++] = '&';
i += 2;
continue;
}
if (buffer[i] == 'N' && buffer[i+1] == 'O' && buffer[i+2] == 'T') {
buf[id++] = '!';
i += 2;
continue;
}
if (buffer[i] == 'O' && buffer[i+1] == 'R') {
buf[id++] = '|';
i++;
continue;
}
if (buffer[i] == 'T' && buffer[i+1] == 'R' && buffer[i+2] == 'U' && buffer[i+3] == 'E') {
buf[id++] = '1';
i += 3;
continue;
}
if (buffer[i] == 'F' && buffer[i+1] == 'A' && buffer[i+2] == 'L' && buffer[i+3] == 'S' && buffer[i+4] == 'E') {
buf[id++] = '0';
i += 4;
continue;
}
if (buffer[i] == '(' || buffer[i] == ')') {
buf[id++] = buffer[i];
}
}
int t; id = 0;
scanf("%d",&t);
while (t--) {
id = 0;
char crt = 0;
while ('A' > crt || crt > 'Z') scanf("%c\n",&crt);
val[crt] = !val[crt];
printf("%d",(eor())?(1):(0));
}
printf("\n");
return 0;
}