Pagini recente » Cod sursa (job #328095) | Cod sursa (job #556406) | Cod sursa (job #2492162) | Cod sursa (job #2124160) | Cod sursa (job #2581710)
#include <bits/stdc++.h>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
int l, n, i;
bool val[26];
string e, s;
bool eval();
bool expresie();
bool var();
void read()
{
string exp;
getline(in, exp, '\n');
int i = 0;
l = exp.size();
while(i < l)
{
string r = "";
if(exp[i] != ' ' && exp[i] != '(' && exp[i] != ')')
{
while(exp[i] != ' ' && exp[i] != '(' && exp[i] != ')' && i < l)
{
r += exp[i];
i++;
}
if(r != "")
{
if(r == "AND")
e += "&";
else if(r == "OR")
e += "|";
else if(r == "NOT")
e += "!";
else if(r == "FALSE")
e += "0";
else if(r == "TRUE")
e += "1";
else
e += r;
}
}
if(exp[i] != ' ')
{
e += exp[i];
i++;
}
else
i++;
}
l = e.size();
in>>n;
in>>s;
}
bool var()
{
if(isalpha(e[i]))
{
char c = e[i];
i++;
return val[c - 'A'];
}
if(e[i] == '1')
return 1;
if(e[i] == '0')
return 0;
return 0;
}
bool expresie()
{
bool r = 0;
int nr = 0;
while(e[i] == '!')
{
i++;
nr++;
}
if(e[i] == '(')
{
i++;
r = eval();
i++;
if(nr % 2)
return !r;
return r;
}
r = var();
if(nr % 2)
return !r;
return r;
}
bool eval()
{
bool r = expresie();
while(e[i] == '&' || e[i] == '|')
{
if(e[i] == '&')
{
i++;
r = r & expresie();
}
if(e[i] == '|')
{
i++;
r = r | expresie();
}
}
return r;
}
void solve()
{
for(int j = 0; j < n; j++)
{
val[s[j] - 'A'] = !val[s[j] - 'A'];
i = 0;
out<<eval();
}
}
int main()
{
read();
solve();
return 0;
}