Pagini recente » Cod sursa (job #2610649) | Cod sursa (job #1727629) | Cod sursa (job #1276884) | Cod sursa (job #1010731) | Cod sursa (job #2790483)
#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;
if (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)
return !val;
return val;
}
bool f_AND() {
int val, aux;
val = get_val();
while (poz < n && s[poz] == '&') {
poz++;
aux = get_val();
val = (val & aux);
}
return val;
}
bool f_OR() {
int val, aux;
val = f_AND();
while (poz < n && s[poz] == '|') {
poz++;
aux = f_AND();
val = (val | aux);
}
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' && s1[i + 1] == 'A' && s1[i + 2] == 'L' && s1[i + 3] == 'S' && s1[i + 4] == 'E') {
s += '0';
i += 4;
}
else if (s1[i] != ' ')
s += s1[i];
}
n = s.size();
}
int main() {
int m, i;
char ch;
string q, s1;
getline(cin, s1);
cin >> m >> q;
n = s1.size();
fsimpl(s1);
for (ch = 'A'; ch <= 'Z'; ch++)
mpval[ch] = 0;
for (i = 0; i < m; i++) {
mpval[q[i]] = !mpval[q[i]];
poz = 0;
cout << f_OR();
}
return 0;
}