Pagini recente » Cod sursa (job #806036) | Cod sursa (job #1389315) | Cod sursa (job #2699663) | Cod sursa (job #1049662) | Cod sursa (job #2716178)
#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;
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
{
if(s[i] == '1' || s[i] == '0'){
if(nu)
return !(s[i] - '0');
return (s[i] - '0');
}
if(nu)
return !vals[s[i] - 'A'];
return vals[s[i] - 'A'];
}
}
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()
{
while(1){
string ax;
fin >> ax;
if(isdigit(ax[0]))
break;
if(ax == "AND")
s += "&";
else if(ax == "OR")
s += "|";
else if(ax == "TRUE")
s += "1";
else if(ax == "FALSE")
s += "0";
else if(ax == "NOT")
s += "!";
else s += ax;
}
string modif;
fin >> modif;
int n = modif.size();
for(int i = 0; i < n; ++i){
vals[modif[i] - 'A'] = 1 - vals[modif[i] - 'A'];
fout << evalLowPr();
}
return 0;
}