Pagini recente » Cod sursa (job #1780290) | Cod sursa (job #773319) | Borderou de evaluare (job #1331036) | Cod sursa (job #1071841) | Cod sursa (job #2330574)
/// __/^^^^^^^^^^^\__
/// / <.^> <.^> \
/// | < |
/// \ -\_____/- /
/// \ ^ ^ /
/// \___________/
/// \ /
/// | |
/// ^----------^
#include <fstream>
#include <vector>
#include <algorithm>
#include <cassert>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
string s;
bool expresie();
bool tinand();
bool termen();
int t(0);
bool termen() {
bool noht(0);
if (s[t] == '!')
noht = 1, ++t;
if (s[t] == '(') {
++t;
return expresie() ^ noht;
}
else
return (s[t++] - '0') ^ noht;
}
bool tinand() {
bool ans = termen();
while (s[t] == '&' && t < s.size()) {
++t;
ans &= termen();
}
return ans;
}
bool expresie() {
bool raspuns = tinand();
while (t < s.size() && s[t] == '|') {
++t;
raspuns |= tinand();
}
++t;///)
return raspuns;
}
int main()
{
string raws;
getline(cin, raws);
for (int i = 0; i < raws.size(); ++i) {
if (raws[i] == ' ')
continue;
if (i < raws.size() - 1 && raws[i] == 'T' && raws[i + 1] == 'R')
s = s + '1', i += 3;
else if (i < raws.size() - 1 && raws[i] == 'F' && raws[i + 1] == 'A')
s = s + '0', i += 4;
else if (i < raws.size() - 1 && raws[i] == 'A' && raws[i + 1] == 'N')
s = s + '&', i += 2;
else if (i < raws.size() - 1 && raws[i] == 'N' && raws[i + 1] == 'O')
s = s + '!', i += 2;
else if (i < raws.size() - 1 && raws[i] == 'O' && raws[i + 1] == 'R')
s = s + '|', i++;
else
s = s + raws[i];
}
raws = s;
int n;
string q;
cin >> n >> q;
for (int i = 0; i < s.size(); ++i)
if (raws[i] >= 'A' && raws[i] <= 'Z')
s[i] = '0';
for (int i = 0; i < n; ++i) {
for (int j = 0; j < s.size(); ++j)
if (raws[j] == q[i])
s[j] = '1' - s[j] + '0';
t = 0;
cout << expresie();
}
return 0;
}