Pagini recente » Cod sursa (job #293642) | Cod sursa (job #1503404) | Cod sursa (job #1928087) | Cod sursa (job #1262967) | Cod sursa (job #2790432)
#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();
void skip_space() {
while (s[poz] == ' ')
poz++;
}
bool get_val() {
int vnot = 0;
skip_space();
if (poz + 1 < n && s[poz] == 'N' && s[poz + 1] == 'O') {
poz += 3;
vnot = 1;
}
skip_space();
if (poz < n && s[poz] == '(') {
poz++;
if (vnot == 1)
return 1 - f_OR();
else
return f_OR();
poz++;
}
skip_space();
if (poz + 1 < n && s[poz] == 'T' && s[poz + 1] == 'R') {
poz += 4;
if (vnot == 1)
return 0;
return 1;
}
if (poz + 1 < n && s[poz] == 'F' && s[poz + 1] == 'A') {
poz += 5;
if (vnot == 1)
return 1;
return 0;
}
skip_space();
poz++;
if (vnot == 1)
return 1 - mpval[s[poz - 1]];
return mpval[s[poz - 1]];
}
bool f_AND() {
int val;
val = get_val();
skip_space();
while (poz < n && s[poz] == 'A') {
poz += 3;
skip_space();
val = (val & get_val());
skip_space();
}
return val;
}
bool f_OR() {
int val;
val = f_AND();
skip_space();
while (poz < n && s[poz] == 'O') {
poz += 2;
skip_space();
val = (val | f_AND());
skip_space();
}
return val;
}
int main() {
int m, i;
string q;
getline(cin, s);
cin >> m >> q;
n = s.size();
for (i = 0; i < m; i++) {
mpval[q[i]] = 1 - mpval[q[i]];
poz = 0;
cout << f_OR();
}
return 0;
}