Pagini recente » Cod sursa (job #230785) | Cod sursa (job #951992) | Cod sursa (job #805515) | Cod sursa (job #239279) | Cod sursa (job #2409273)
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
const string FILE_NAME = "bool";
const int N_MAX = 1005;
ifstream in { FILE_NAME + ".in" };
ofstream out { FILE_NAME + ".out" };
int K;
char* p;
char s[4 * N_MAX];
bool var[35];
string sol;
bool isP(char c) { return c == '(' || c == ')'; }
void init() {
char temp[N_MAX];
in.getline(temp + 1, N_MAX);
for (int i { 1 }; temp[i]; ++i) {
if (isP(temp[i]))
s[K++] = ' ';
s[K++] = temp[i];
if (isP(temp[i]))
s[K++] = ' ';
}
s[K] = '\0';
K = 0;
for (p = strtok(s, " "); p; p = strtok(nullptr, " "))
if (strlen(p) == 1) {
s[K++] = p[0];
} else {
if (p[0] == 'N')
s[K++] = '!';
else if (p[0] == 'O')
s[K++] = 1;
else if (p[0] == 'A')
s[K++] = 2;
else if (p[0] == 'T')
s[K++] = -1;
else if (p[0] == 'F')
s[K++] = -2;
}
s[K] = '\0';
}
bool OR();
bool EXPR() {
if (*p == '(') {
++p;
bool res { OR() };
++p;
return res;
}
if (*p == '!') {
++p;
return !EXPR();
}
bool res;
if (*p < 0)
res = *p == -1 ? true : false;
else
res = var[*p - 'A'];
++p;
return res;
}
bool AND() {
bool res { EXPR() };
while (*p == 2) {
++p;
res &= EXPR();
}
return res;
}
bool OR() {
bool res { AND() };
while (*p == 1) {
++p;
res |= AND();
}
return res;
}
void solve() {
int n;
in >> n;
while (n--) {
char c;
in >> c;
var[c - 'A'] = !var[c - 'A'];
p = s;
sol += '0' + OR();
}
}
void print() {
out << sol;
}
int main() {
init();
solve();
print();
}