Pagini recente » Cod sursa (job #1488554) | Arhiva de probleme | Cod sursa (job #1279980) | Cod sursa (job #3030468) | Cod sursa (job #2716232)
#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);
int lg = strlen(sir);
int ij = 0;
while(ij < lg)
{
if(sir[ij] == 'T' && sir[ij + 1] == 'R')
s += "1", ij += 4;
else if(sir[ij] == 'A' && sir[ij + 1] == 'N')
s += "&", ij += 3;
else if(sir[ij] == 'N' && sir[ij + 1] == 'O')
s += "!", ij += 3;
else if(sir[ij] == 'F' && sir[ij + 1] == 'A')
s += "0", ij += 5;
else if(sir[ij] == 'O' && sir[ij + 1] == 'R')
s += "|", ij += 2;
else if(sir[ij] != ' ')
s += string(1, sir[ij]), ++ij;
else ++ij;
}
//fout << s << '\n';
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;
}