Pagini recente » Cod sursa (job #1787378) | Rating Ceausu Bogdan Constantin (b0by.ceausu) | Cod sursa (job #2043610) | Cod sursa (job #1228687) | Cod sursa (job #2744600)
#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 si(), sau(), eval();
bool sau() {
int rez = si();
while (ind + 1 < sz && s[ind] == 'O' && s[ind + 1] == 'R') {
ind += 3;
rez = rez || si();
}
return rez;
}
bool si() {
int rez = eval();
while (ind + 2 < sz && s[ind] == 'A' && s[ind + 1] == 'N' && s[ind + 2] == 'D') {
ind += 4;
rez = rez && eval();
}
return rez;
}
bool eval() {
int rez;
if (s[ind] == '(') {
ind++;
rez = sau();
ind++;
}
else if (ind + 2 < sz && s[ind] == 'N' && s[ind + 1] == 'O' && s[ind + 2] == 'T') {
ind += 4;
rez = 1 - eval();
}
else if (ind + 3 < sz && s[ind] == 'T' && s[ind + 1] == 'R' && s[ind + 2] == 'U' && s[ind + 3] == 'E') {
ind += 5;
rez = 1;
}
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 += 6;
rez = 0;
}
else {
rez = val[s[ind]];
ind += 2;
}
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 << sau();
}
g.close();
}
int main() {
read();
solve();
return 0;
}