Pagini recente » Cod sursa (job #3140267) | Cod sursa (job #902676) | Cod sursa (job #1033443) | Cod sursa (job #1772075) | Cod sursa (job #2716224)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int evalLowPr();
char sir[1005];
int vals[27], i = 0;
string s, axx, modif;
int evalHighPr(){
bool nu = false;
int f;
while(s[i] == '!'){
++i;
nu = !nu;
}
if(s[i] == '('){
++i;
f = evalLowPr();
++i;
if(nu)
return !f;
return f;
}
else
{
bool vv;
if(s[i] == '1' || s[i] == '0')
vv = s[i] - '0';
else vv = vals[s[i] - 'A'];
++i;
if(nu)
return !vv;
return vv;
}
}
int evalMidPr(){
int f = evalHighPr();
while(i < s.size()){
if(s[i] == '&')
++i, f = (f && evalHighPr());
else break;
}
return f;
}
int evalLowPr(){
int t = evalMidPr();
while(i < s.size()){
if(s[i] == '|')
++i, t = (t || evalMidPr());
else break;
}
return t;
}
int main()
{
fin.getline(sir, 1001);
char *p = strtok(sir, " ");
while(p != NULL){
int lg = strlen(p);
int i = 0;
while(i < lg){
if(p[i] == '(')
s += "(", ++i;
else if(p[i] == ')')
s += ")", ++i;
else if(p[i] == 'T' && p[i + 1] == 'R')
s += "1", i += 4;
else if(p[i] == 'A' && p[i + 1] == 'N')
s += '&', i += 3;
else if(p[i] == 'N' && p[i + 1] == 'O')
s += '!', i += 3;
else if(p[i] == 'F' && p[i + 1] == 'A')
s += '0', i += 5;
else if(p[i] == 'O' && p[i + 1] == 'R')
s += '|', i += 2;
else s += p[i], ++i;
}
p = strtok(NULL, " ");
}
fin >> axx;
fin >> modif;
int n = modif.size();
for(int ii = 0; ii < n; ++ii){
vals[modif[ii] - 'A'] = 1 - vals[modif[ii] - 'A'];
i = 0;
fout << evalLowPr();
}
return 0;
}