Pagini recente » Cod sursa (job #289246) | Cod sursa (job #2866959) | Cod sursa (job #1698088) | Cod sursa (job #112246) | Cod sursa (job #1825087)
#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 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;
}
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'];
}