Pagini recente » Cod sursa (job #1064327) | Cod sursa (job #1095548) | Cod sursa (job #2116182) | Cod sursa (job #639224) | Cod sursa (job #1845722)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
string sir;
int k;
bool v[26];
int expresie();
int factor();
int termen();
int expresie()
{
int val=termen();
while(sir[k]=='|')
++k,val|=termen();
return val;
}
int termen()
{
int val=factor();
while(sir[k]=='&')
++k,val&=factor();
return val;
}
int factor()
{
int val=0;
if(sir[k] == '!')
{
++k;
return !factor();
}
if(sir[k] == '(')
{
++k;
val=expresie();
++k;
return val;
}
if(sir[k] == '1')
{
++k;
return 1;
}
if(sir[k] == '0')
{
++k;
return 0;
}++k;
return v[sir[k-1] - 'A'];
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
getline(cin,sir);
int n,l=sir.length();
char c;
scanf("%d ",&n);
for(int i=0; i<=sir.size(); i++)
if(sir[i]=='N' && sir[i+1]=='O' && sir[i+2]=='T')
sir[i]='!',sir.erase(i+1,2);
else if(sir[i]=='O' && sir[i+1]=='R')
sir[i]='|',sir.erase(i+1,1);
else if(sir[i]=='A' && sir[i+1]=='N' && sir[i+2]=='D')
sir[i]='&',sir.erase(i+1,2);
else if(sir[i]==' ')
sir.erase(i,1),i--;
else if(sir[i]=='T' && sir[i+1]=='R')
sir[i]='1',sir.erase(i+1,3);
else if(sir[i]=='F' && sir[i+1]=='A')
sir[i]='0',sir.erase(i+1,4);
// cout<<sir;
for(int i=1; i<=n; i++)
{
scanf("%c",&c);
v[c-'A']=!v[c-'A'];
k=0;
printf("%d",expresie());
}
return 0;
}