Pagini recente » Cod sursa (job #2378693) | Cod sursa (job #1919667) | Cod sursa (job #2720841) | Cod sursa (job #2273357) | Cod sursa (job #3279767)
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
const int MAX=1000;
int n,i,sol,cnt;
char v[MAX+10],b;
unordered_map <char,bool> f;
bool verifor();
bool verifand();
bool verifnot();
int constanta();
int termen();
int expresie();
int main()
{
fin.getline(v,MAX+5);
cnt=strlen(v);
fin>>n;
while (n)
{
fin>>b;
f[b]=(1^f[b]);
i=0;
sol=expresie();
fout<<sol;
n--;
}
return 0;
}
bool verifor()
{
if (i+1>=cnt)
return false;
return (v[i]=='O' && v[i+1]=='R');
}
bool verifand()
{
if (i+2>=cnt)
return false;
return (v[i]=='A' && v[i+1]=='N' && v[i+2]=='D');
}
bool verifnot()
{
if (i+2>=cnt)
return false;
return (v[i]=='N' && v[i+1]=='O' && v[i+2]=='T');
}
int termen()
{
int r;
if (v[i]==' ')
i++;
if (v[i]=='(')
{
i++;
r=expresie();
i++;
}
else
{
if (verifnot())
{
i++;
i++;
i++;
r=(1^expresie());
}
else
{
r=constanta();
}
}
return r;
}
int expresie()
{
if (v[i]==' ')
i++;
int r=termen();
while (v[i]==' ' || verifor() || verifand())
{
if (v[i]==' ')
i++;
else
if (verifor())
{
i++;
i++;
r=(r|termen());
}
else
if (verifand())
{
i++;
i++;
i++;
r=(r&termen());
}
}
return r;
}
int constanta()
{
int r;
if (v[i]==' ')
i++;
if (i+1>=cnt)
{
r=f[v[i]];
i++;
}
else
{
if (v[i]=='F' && v[i+1]=='A')
{
r=0;
i+=5;
}
else
if (v[i]=='T' && v[i+1]=='R')
{
r=1;
i+=4;
}
else
{
r=f[v[i]];
i++;
}
}
return r;
}