Pagini recente » Cod sursa (job #2592277) | Cod sursa (job #2143930) | Cod sursa (job #3220070) | Cod sursa (job #934174) | Cod sursa (job #306385)
Cod sursa(job #306385)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <bitset>
using namespace std;
bitset<26> stare;
char s[1024],valori[1024], tmp[1024];
int N, poz;
bool eval();
bool termen();
bool factor();
bool eval(){
bool rez = termen();
while (s[poz] == 'O' && s[poz + 1] == 'R'){
poz += 3;
rez = rez | termen();
}
return rez;
}
bool termen(){
bool rez = factor();
while (s[poz] == 'A' && s[poz + 1] == 'N' && s[poz + 2] == 'D'){
poz += 4;
rez = rez & factor();
}
return rez;
}
bool factor() {
bool rez;
if (s[poz] == '(') {
++poz;
rez = eval();
++poz;
} else
if (s[poz] == 'N' && s[poz + 1] == 'O' && s[poz + 2] == 'T') {
poz += 4;
rez = ! factor();
} else
if (s[poz] == 'T' && s[poz + 1] == 'R' && s[poz + 2] == 'U' && s[poz + 3] == 'E') {
poz += 5;
rez = 1;
} else
if (s[poz] == 'F' && s[poz + 1] == 'A' && s[poz + 2] == 'L' && s[poz + 3] == 'S' && s[poz + 4] == 'E') {
poz += 6;
rez = 0;
} else{
rez = stare[s[poz] - 'A'];
poz += 2;
}
return rez;
}
int main(){
int i, aux, len, n, m;
char str[1012];
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
gets(s);
i = -1; n = strlen(s); m = -1;
while (i < n) {
i++;
str[++m] = s[i];
while (s[i] == s[i + 1] && s[i + 1] == ' ' && i < n) i++;
}
str[++m] = 0;
strcpy(s, str);
//puts(s);
scanf("%d\n", &N);
gets(valori);
for (i = 0; i < N; ++i){
poz = 0;
stare[valori[i] - 'A'] = 1 - stare[valori[i] - 'A'] ; //printf("%c %d", valori[i], (int)stare[valori[i] - 'A']);
printf("%d", (int) eval());
}
}