Pagini recente » Cod sursa (job #600369) | Cod sursa (job #679141) | Cod sursa (job #3187559) | Cod sursa (job #2637922) | Cod sursa (job #2652681)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
map <char, bool> mp;
int n, p;
string s;
bool _and();
bool termen();
bool _or() {
bool r = _and();
while (s[p] == 'o') {
++p;
r = r or _and();
++p;
}
return r;
}
bool _and() {
bool r = termen();
while (s[p] == 'a') {
++p;
r = r and termen();
++p;
}
return r;
}
bool termen() {
bool r = false;
if (s[p] == '(') {
++p;
r = _or();
++p;
}
bool _not = false;
if (s[p] == 'n') {
_not = true;
++p;
}
if (s[p] == '1') {
r = true;
++p;
}
if (s[p] == '0')
++p;
if (s[p] >= 'A' && s[p] <= 'Z') {
r = mp[s[p]];
++p;
}
if (_not)
r = !r;
return r;
}
void transforma() {
for (p = 0; p < s.size(); ++p) {
if (s[p] == ' ') {
s.erase(p, 1);
--p;
}
else if ((s[p] == 'N' && s[p + 1] == 'O' && s[p + 2] == 'T') || (s[p] == 'A' && s[p + 1] == 'N' && s[p + 2] == 'D')) {
char first = s[p];
s.erase(p, 3);
if (first == 'N')
s.insert(p, "n");
else
s.insert(p, "a");
--p;
}
else if (s[p] == 'T' && s[p + 1] == 'R' && s[p + 2] == 'U' && s[p + 3] == 'E') {
s.erase(p, 4);
s.insert(p, "1");
--p;
}
else if (s[p] == 'F' && s[p + 1] == 'A' && s[p + 2] == 'L' && s[p + 3] == 'S' && s[p + 4] == 'E') {
s.erase(p, 5);
s.insert(p, "0");
--p;
}
else if (s[p] == 'O' && s[p + 1] == 'R') {
s.erase(p, 2);
s.insert(p, "o");
--p;
}
}
return;
}
int main() {
getline(fin, s);
transforma();
transforma();
fin >> n;
while(n--) {
char el;
fin >> el;
p = 0;
if (mp[el] == false)
mp[el] = true;
else
mp[el] = false;
fout << _or();
}
return 0;
}