Pagini recente » Cod sursa (job #1814947) | Cod sursa (job #2132418) | Cod sursa (job #2622712) | Cod sursa (job #2340231) | Cod sursa (job #2496267)
#include <bits/stdc++.h>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
int n,val[30]; /// A = 0
string S;
char solve(string x)
{int i,nr;
string fin = "" , op = "" , str = "";
for (i = 0; i < x.size(); )
{//cout << i << "\n";
if (x[i] == ' ') i++;
else if ( (x[i] >= 'A' && x[i] <= 'Z') && (i + 1 >= x.size() || x[i + 1] == ' ') )
fin += val[x[i] - 'A'], i++;
else if( x[i] >= 'A' && x[i] <= 'Z')
{
op = "";
while (x[i] >= 'A' && x[i] <= 'Z'){
op += x[i];
i++;
}
if (op == "AND") fin += 'a';
else if (op == "OR") fin += 'o';
else if (op == "NOT") fin += 'n';
else if (op == "TRUE") fin += char(1);
else if (op == "FALSE") fin += char(0);
}
else if( x[i] == '(' )
{
nr = 1 , i++ , str = "";
while (nr){
if (x[i] == '(') nr++;
else if(x[i] == ')') nr--;
str += x[i];
i++;
}
str.pop_back();
fin += solve(str);
}
//cout << fin << "\n";
}
string new_boy = "";
for (i = 0; i < fin.size();)
if (fin[i] == 'n'){
i++;
new_boy += char ( 1 - int(fin[i]) );
i++;
}
else new_boy += fin[i] , i++;
fin = new_boy;
new_boy = "";
char l;
for (i = 0; i < fin.size();)
if (fin[i] == 'a'){
l = int(new_boy.back()) && int (fin[i + 1]);
new_boy.pop_back();
i += 2;
new_boy += l;
}
else new_boy += fin[i] , i++;
fin = new_boy;
new_boy = "";
for (i = 0; i < fin.size();)
if (fin[i] == 'o'){
l = int(new_boy.back()) || int (fin[i + 1]);
new_boy.pop_back();
i += 2;
new_boy += l;
}
else new_boy += fin[i] , i++;
fin = new_boy;
return fin.back();
}
int main()
{int i,j;
char c;
getline(in , S);
in >> n;
for (i = 1; i <= n; i++)
{
in >> c;
val[c - 'A'] = 1 - val[c - 'A'];
out << int (solve(S));
}
out << "\n";
in.close();
out.close();
return 0;
}