Pagini recente » Cod sursa (job #3222108) | Cod sursa (job #2620905) | Cod sursa (job #1670496) | Cod sursa (job #2730998) | Cod sursa (job #428379)
Cod sursa(job #428379)
#include <cstdio>
#include <string>
#include <iostream>
using namespace std;
int n;
string expresie;
int val[56];
int eval2(string bul) {
while (bul.size() > 1) {
//find *
int found = 0;
for (int i = 1; i + 1 < bul.size(); ++i) if (bul[i] == '*') {
found = 1;
int val = 0;
if (bul[i-1] == '1' && bul[i+1] == '1') val = 1;
string doi = bul.substr(0, i - 1);
if (val == 0) doi += "0";
else doi += "1";
doi += bul.substr(i + 2);
bul = doi;
break;
}
if (found) continue;
break;
}
for (int i = 0; i < bul.size(); ++i) if (bul[i] == '1') return 1;
return 0;
}
int eval(string exp) {
//2 parti
int p = 0;
if (exp == "TRUE") return 1;
if (exp == "FALSE") return 0;
if (exp.size() == 1) return val[exp[0]-'A'];
string lst="";
int ret = 1, op = 1, solved = 0;
string bul = "1";
for (int i = 0; i < exp.size(); ++i) {
if (exp[i] == '(') {++p; lst += '('; continue;}
if (exp[i] == ')') {--p; lst += ')'; continue;}
if (p == 0 && exp[i] == 'A' && (i+1 < exp.size() && exp[i+1] == 'N')) {
if (op == 1) bul+="*";
else bul += "+";
if (eval(lst)) bul += "1";
else bul += "0";
solved = 1;
op = 1; lst = "";i+=2;continue;
}
if (p == 0 && exp[i] == 'O' && (i+1 < exp.size() && exp[i+1] ==
'R')) {
if (op == 1) bul+="*";
else bul+="+";
if (eval(lst)) bul += "1";
else bul += "0";
solved = 1;
op = 0; lst = ""; i++;continue;
}
lst += exp[i];
}
if (solved == 1) {
if (op == 1) bul +="*";
else bul += "+";
if (eval(lst)) bul += "1";
else bul += "0";
return eval2(bul);
}
p = exp.size();
if (exp[0] == 'N' && exp[1] == 'O') return !eval(exp.substr(3));
return eval(exp.substr(1, p - 2));
}
int main() {
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
char exp2[1024];
gets(exp2);
string line = exp2;
for (int i = 0; i < line.size(); ++i) if (line[i] != ' ') {
expresie += line[i];
}
int m;
scanf("%d\n", &m);
string linie;
cin >> linie;
for (int i = 0; i < linie.size(); ++i) {
val[linie[i]-'A'] ^= 1;
printf("%d", eval(expresie));
}
printf("\n");
return 0;
}