Pagini recente » Cod sursa (job #2073466) | Cod sursa (job #1611533) | Cod sursa (job #1511900) | Cod sursa (job #888068) | Cod sursa (job #2790459)
#include <fstream>
#include <map>
using namespace std;
ifstream cin ("bool.in");
ofstream cout ("bool.out");
string s;
map <char, bool> mpval;
int n, poz;
bool f_AND();
bool f_OR();
bool get_val() {
int vnot = 0, val = 0;
while (s[poz] == '!') {
vnot = !vnot;
poz++;
}
if (s[poz] == '(') {
poz++;
val = f_OR();
poz++;
}
else if ((s[poz] == '0' || s[poz] == '1')) {
val = s[poz] - '0';
poz++;
}
else {
val = mpval[s[poz]];
poz++;
}
if (vnot == 1)
return !val;
return val;
}
bool f_AND() {
int val;
val = get_val();
while (poz < n && s[poz] == '&') {
poz++;
val = (val & get_val());
}
return val;
}
bool f_OR() {
int val;
val = f_AND();
while (poz < n && s[poz] == '|') {
poz++;
val = (val | f_AND());
}
return val;
}
void fsimpl(string& s1) {
int i;
s = "";
for (i = 0; i < n; i++) {
if ((i + 2) < n && s1[i] == 'A' && s1[i + 1] == 'N' && s1[i + 2] == 'D') {
s += '&';
i += 2;
}
else if ((i + 1) < n && s1[i] == 'O' && s1[i + 1] == 'R') {
s += '|';
i++;
}
else if ((i + 2) < n && s1[i] == 'N' && s1[i + 1] == 'O' && s1[i + 2] == 'T') {
s += '!';
i += 2;
}
else if ((i + 3) < n && s1[i] == 'T' && s1[i + 1] == 'R' && s1[i + 2] == 'U' && s1[i + 3] == 'E') {
s += '1';
i += 3;
}
else if ((i + 4) < n && s1[i] == 'F' && s[i + 1] == 'A' && s[i + 2] == 'L' && s[i + 3] == 'S' && s[i + 4] == 'E') {
s += '0';
i += 4;
}
else if (s1[i] != ' ')
s += s1[i];
}
n = s.size();
}
int main() {
int m, i;
string q, s1;
getline(cin, s1);
cin >> m >> q;
n = s1.size();
fsimpl(s1);
for (i = 0; i < m; i++) {
mpval[q[i]] = !mpval[q[i]];
poz = 0;
cout << f_OR();
}
return 0;
}