Pagini recente » Cod sursa (job #1751186) | Cod sursa (job #1495358) | Cod sursa (job #1340534) | Cod sursa (job #724634) | Cod sursa (job #1789622)
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <string>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
int n,p;
string s,mod;
unordered_map<char,bool> harta;
bool prior();
bool prinot();
bool priand();
bool eval()
{
bool r = prior();
while(s[p]=='O' && s[p+1]=='R')
{
p+=2;
r = r || prior();
}
return r;
}
bool prior()
{
bool r = priand();
while(s[p]=='A' && s[p+1]=='N' && s[p+2]=='D')
{
p+=3;
r = r && priand();
}
return r;
}
bool priand()
{
bool r;
if(s[p]=='N' && s[p+1]=='O' && s[p+2]=='T')
{
p=p+3;
r = !prinot();
}
else
{
r = prinot();
}
return r;
}
bool prinot()
{
bool r;
if(s[p]=='(')
{
p++;
r = eval();
p++;
}
else if((s[p]=='T' && s[p+1]=='R' && s[p+2]=='U' && s[p+3]=='E') || (s[p]=='F' && s[p+1]=='A' && s[p+2]=='L' && s[p+3]=='S' && s[p+4]=='E'))
{
if(s[p]=='T' && s[p+1]=='R' && s[p+2]=='U' && s[p+3]=='E')
{
p+=4;
r = true;
}
else if(s[p]=='F' && s[p+1]=='A' && s[p+2]=='L' && s[p+3]=='S' && s[p+4]=='E')
{
p+=5;
r= false;
}
}
else
{
r = harta[s[p]];
p+=1;
}
return r;
}
int main()
{
getline(in,s);
in >> n;
getline(in,mod); // temp
getline(in,mod);
for(int i='A';i<='Z';i++)
{
harta[(char)i] = false;
}
// cout << eval() << endl;
// cout << s.size() << " " ;
// cout << p;
//
for(int i=0;i<n;i++)
{
harta[mod[i]] = !harta[mod[i]];
p=0;
out << eval();
}
return 0;
}