Pagini recente » Cod sursa (job #774335) | Cod sursa (job #1132089) | Cod sursa (job #2800735) | Cod sursa (job #428189) | Cod sursa (job #2744499)
#include <fstream>
#include <cstring>
#include <iostream>
using namespace std;
char s[1001], modific[105];
int n, ind, sz;
bool val[128];
void read() {
ifstream f("bool.in");
f.getline(s, 1001);
f >> n; f.get();
for (int i = 1; i <= n; i++)
f >> modific[i];
sz = strlen(s);
f.close();
}
bool andop();
bool eval();
bool notop();
bool orop();
bool notop() {
while (s[ind] == ' ')
ind++;
if (ind + 4 < sz && s[ind] == 'F' && s[ind + 1] == 'A' && s[ind + 2] == 'L' && s[ind + 3] == 'S' && s[ind + 4] == 'E') {
ind += 4;
return 1;
}
if (ind + 3 < sz && s[ind] == 'T' && s[ind + 1] == 'R' && s[ind + 2] == 'U' && s[ind + 3] == 'E') {
ind += 3;
return 0;
}
if (isalpha(s[ind]) && !isalpha(s[ind + 1]))
return 1 - val[s[ind]];
if (s[ind] == '(') {
ind++;
return 1 - eval();
}
if (ind + 2 < sz && s[ind] == 'N' && s[ind + 1] == 'O' && s[ind + 2] == 'T') {
ind += 3;
return 1 - notop();
}
}
bool andop() {
while (s[ind] == ' ')
ind++;
if (ind + 4 < sz && s[ind] == 'F' && s[ind + 1] == 'A' && s[ind + 2] == 'L' && s[ind + 3] == 'S' && s[ind + 4] == 'E') {
ind += 4;
return 0;
}
if (ind + 3 < sz && s[ind] == 'T' && s[ind + 1] == 'R' && s[ind + 2] == 'U' && s[ind + 3] == 'E') {
ind += 3;
return 1;
}
if (isalpha(s[ind]) && !isalpha(s[ind + 1]))
return val[s[ind]];
if (s[ind] == '(') {
ind++;
return eval();
}
if (ind + 2 < sz && s[ind] == 'N' && s[ind + 1] == 'O' && s[ind + 2] == 'T') {
ind += 3;
return notop();
}
}
bool orop() {
while (s[ind] == ' ')
ind++;
if (ind + 4 < sz && s[ind] == 'F' && s[ind + 1] == 'A' && s[ind + 2] == 'L' && s[ind + 3] == 'S' && s[ind + 4] == 'E') {
ind += 4;
return 0;
}
if (ind + 3 < sz && s[ind] == 'T' && s[ind + 1] == 'R' && s[ind + 2] == 'U' && s[ind + 3] == 'E') {
ind += 3;
return 1;
}
if (isalpha(s[ind]) && !isalpha(s[ind + 1]))
return val[s[ind]];
if (s[ind] == '(') {
ind++;
return eval();
}
if (ind + 2 < sz && s[ind] == 'N' && s[ind + 1] == 'O' && s[ind + 2] == 'T') {
ind += 3;
return notop();
}
}
bool eval() {
int rez = 1;
while (ind < sz) {
while (s[ind] == ' ')
ind++;
if (ind + 3 < sz && s[ind] == 'T' && s[ind + 1] == 'R' && s[ind + 2] == 'U' && s[ind + 3] == 'E') {
rez = 1;
ind += 3;
}
else if (ind + 4 < sz && s[ind] == 'F' && s[ind + 1] == 'A' && s[ind + 2] == 'L' && s[ind + 3] == 'S' && s[ind + 4] == 'E') {
rez = 0;
ind += 4;
}
else if (isalpha(s[ind]) && !isalpha(s[ind + 1]))
rez = val[s[ind]];
else if (s[ind] == '(') {
ind++;
rez = eval();
}
else if (ind + 2 < sz && s[ind] == 'N' && s[ind + 1] == 'O' && s[ind + 2] == 'T') {
ind += 3;
rez = notop();
}
else if (ind + 2 < sz && s[ind] == 'A' && s[ind + 1] == 'N' && s[ind + 2] == 'D') {
ind += 3;
rez = (andop() && rez);
}
else if (ind + 1 < sz && s[ind] == 'O' && s[ind + 1] == 'R') {
ind += 2;
rez = (orop() || rez);
}
else if (s[ind] == ')')
break;
ind++;
}
return rez;
}
void solve() {
int i;
ofstream g("bool.out");
for (i = 1; i <= n; i++) {
val[modific[i]] = 1 - val[modific[i]];
ind = 0;
g << eval();
}
g.close();
}
int main() {
read();
solve();
return 0;
}