Pagini recente » Cod sursa (job #1815457) | Cod sursa (job #1497781) | Cod sursa (job #2228290) | Cod sursa (job #529146) | Cod sursa (job #2652947)
#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 _or();
bool termen();
bool _and() {
bool r = _or();
while (s[p] == 'A' && s[p + 1] == 'N' && s[p + 2] == 'D') {
p += 4;
r = r and _or();
++p;
}
return r;
}
bool _or() {
bool r = termen();
while (s[p] == 'O' && s[p + 1] == 'R') {
p += 3;
r = r or termen();
++p;
}
return r;
}
bool termen() {
bool r = false;
if (s[p] == '(') {
++p;
r = _and();
++p;
}
else {
bool _not = false;
if (s[p] == 'N' && s[p + 1] == 'O' && s[p + 2] == 'T') {
_not = true;
p += 4;
}
if (s[p] == 'T' && s[p + 1] == 'R' && s[p + 2] == 'U' && s[p + 3] == 'E') {
r = true;
p += 5;
}
if (s[p] == 'F' && s[p + 1] == 'A' && s[p + 2] == 'L' && s[p + 3] == 'S' && s[p + 4] == 'E')
p += 6;
if (s[p] >= 'A' && s[p] <= 'Z' && (s[p + 1] < 'A' || s[p + 1] > 'Z')) {
r = mp[s[p]];
p += 1;
}
if (_not)
r = !r;
}
return r;
}
void introdu(int i) {
if (s[i - 1] != ' ')
s.insert(i, " ");
return;
}
int main() {
getline(fin, s);
for (int i = 0; i < s.size(); ++i)
if (s[i] == ' ') {
s.erase(i, 1);
--i;
}
for (int i = 1; i < s.size(); ++i) {
if (s.substr(i, 3) == "NOT" || s.substr(i, 3) == "AND") {
if (s[i + 3] != ' ')
s.insert(i + 3, " ");
introdu(i);
}
else if (s.substr(i, 2) == "OR") {
if (s[i + 2] != ' ')
s.insert(i + 2, " ");
introdu(i);
}
else if (s.substr(i, 4) == "TRUE") {
if (s[i + 4] != ' ')
s.insert(i + 4, " ");
introdu(i);
}
else if (s.substr(i, 5) == "FALSE") {
if (s[i + 5] != ' ')
s.insert(i + 5, " ");
introdu(i);
}
}
//cout << s;
fin >> n;
while(n--) {
char el;
fin >> el;
p = 0;
if (mp[el] == false)
mp[el] = true;
else
mp[el] = false;
fout << _and();
}
return 0;
}