Pagini recente » Cod sursa (job #1102144) | Cod sursa (job #666183) | Cod sursa (job #3329044) | Cod sursa (job #1320134) | Cod sursa (job #3338409)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
const int MAXCHAR = 'Z' + 2;
bool val[MAXCHAR];
string s;
int i, N;
bool OR();
bool AND();
bool TERM();
void skip_space() {
if (i < s.length() && s[i] == ' ') ++i;
}
bool OR() {
bool value = AND();
while (i + 1 < s.length() && s[i] == 'O' && s[i + 1] == 'R') {
i = i + 2;
skip_space();
bool next_value = AND();
value |= next_value;
}
return value;
}
bool AND() {
bool value = TERM();
while (i + 2 < s.length() && s[i] == 'A' && s[i + 1] == 'N' && s[i + 2] == 'D') {
i = i + 3;
skip_space();
bool next_value = TERM();
value &= next_value;
}
return value;
}
bool TERM() {
bool value = false;
if (i + 2 < s.length() && s[i] == 'N' && s[i + 1] == 'O' && s[i + 2] == 'T') {
i = i + 3;
skip_space();
value = TERM();
value = !value;
} else if (i < s.length() && s[i] == '(') {
i = i + 1;
skip_space();
value = OR();
i = i + 1;
skip_space();
} else if (i + 3 < s.length() && s[i] == 'T' && s[i + 1] == 'R' && s[i + 2] == 'U' && s[i + 3] == 'E') {
i = i + 4;
skip_space();
value = true;
} else if (i + 4 < s.length() && s[i] == 'F' && s[i + 1] == 'A' && s[i + 2] == 'L' && s[i + 3] == 'S' && s[i + 4] == 'E') {
i = i + 5;
skip_space();
value = false;
} else {
value = val[s[i]];
i = i + 1;
skip_space();
}
return value;
}
int main()
{
getline(fin, s);
fin >> N;
for (int t = 0; t < N; ++t) {
char variable;
fin >> variable;
if (variable == 'U') {
cout << 'T';
}
val[variable] = !val[variable];
i = 0;
fout << OR() ? '1' : '0';
}
return 0;
}