Pagini recente » Cod sursa (job #302598) | Cod sursa (job #2097232) | Cod sursa (job #1223746) | Profil Snavenport | Cod sursa (job #2791714)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
char s[1015];
map <char, bool> mp;
bool OR(int &p), AND(int &p), NXT(int &p);
void clean(int &p){
while(s[p] == ' ')
p++;
}
///next string
bool NXT(int &p){
clean(p);
bool answer=0;
if(s[p] == '('){
p++; ///scap de (
answer = OR(p);
p++; ///scap de )
}else if(s[p] == 'N' && s[p+1] == 'O' && s[p+2] == 'T'){
p += 3;
answer = !NXT(p);
}else if(s[p] == 'T' && s[p+1] == 'R' && s[p+2] == 'U' && s[p+3] == 'E'){
p += 4;
answer = 1;
}else if(s[p] == 'F' && s[p+1] == 'A' && s[p+2] == 'L' && s[p+3] == 'S' && s[p+4] == 'E'){
p += 5;
answer = 0;
}else{
answer = mp[ s[p] ];
p++;
}
clean(p);
return answer;
}
bool AND(int &p){
clean(p);
bool answer=NXT(p);
while(s[p] == 'A' && s[p+1] == 'N' && s[p+2] == 'D'){
p += 3;
answer &= NXT(p);
}
clean(p);
return answer;
}
bool OR(int &p){
clean(p);
bool answer = AND(p);
while(s[p] == 'O' && s[p+1] == 'R'){
p+=2;
answer |= NXT(p);
}
clean(p);
return answer;
}
int main (){
for(char c='A'; c <= 'Z'; c++)
mp[(char)c]=false;
fin.get(s, 1005);
char c; int q; fin>>q;
while(q--){
fin>>c;
mp[c] = 1-mp[c];
int p=0;
fout<<OR(p);
}
return 0;
}