Pagini recente » Cod sursa (job #2524374) | Cod sursa (job #320359) | Cod sursa (job #427358) | Cod sursa (job #977942) | Cod sursa (job #911684)
Cod sursa(job #911684)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char buffer[1005];
char buf[1005];
bool val[256];
int id,len;
bool eand();
bool eor();
bool eval();
bool eor() {
bool r1,r2;
r1 = eand();
while (buf[id] == '|') {
id++;
r2 = eand();
r1 = r1 || r2;
}
return r1;
}
bool eand() {
bool r1,r2;
r1 = eval();
while (buf[id] == '&') {
id++;
r2 = eval();
r1 = r1 && r2;
}
return r1;
}
bool eval() {
bool notted = false;
bool r;
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() {
f.getline(buffer,1001);
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;
f>>t;
while (t--) {
char crt;
id = 0;
f>>crt;
val[crt] = !val[crt];
g<<(eor()?(1):(0));
}
g<<"\n";
return 0;
}