Pagini recente » Cod sursa (job #234529) | Cod sursa (job #1368429) | Cod sursa (job #1368451) | Cod sursa (job #452722) | Cod sursa (job #1642150)
#include <bits/stdc++.h>
#define DIM 1005
#define NMAX 105
FILE *fin = freopen("bool.in", "r", stdin);
FILE *fout = freopen("bool.out", "w", stdout);
using namespace std;
int n;
char s[DIM], *p, sw[NMAX];
bool v[28];
bool eval();
bool term();
bool fact1();
bool fact2();
bool ok()
{
if(*p == 'N' && *(p + 1) == 'O')
return 1;
if(*p == 'A' && *(p + 1) == 'N')
return 1;
if(*p == 'O' && *(p + 1) == 'R')
return 1;
return 0;
}
bool eval()
{
bool val = term();
if(*p == ' ') ++ p;
while(*p == 'O' && *(p + 1) == 'R')
{
p += 2;
if(*p == ' ') ++ p;
val = val | term();
}
return val;
}
bool term()
{
bool val = fact1();
if(*p == ' ') ++ p;
while(*p == 'A' && *(p + 1) == 'N')
{
p += 3;
if(*p == ' ') ++ p;
val = val & fact1();
}
return val;
}
bool fact1()
{
bool val = fact2();
if(*p == ' ') ++ p;
while(*p == 'N' && *(p + 1) == 'O')
{
p += 3;
if(*p == ' ') ++ p;
val = ~fact2();
}
return val;
}
bool fact2()
{
bool val = 0;
if(*p == ' ') ++ p;
if(*p == '(')
{
++ p;
val = eval();
if(*p == ' ') ++ p;
++ p;
}
if(*p == 'T' && *(p + 1) == 'R')
{
val = 1;
p += 4;
}
if(*p == 'F' && *(p + 1) == 'A')
{
val = 0;
p += 5;
}
if(*p >= 'A' && *p <= 'Z' && !ok())
{
val = v[*p - 'A'];
++ p;
if(*p == ' ') ++ p;
}
return val;
}
void read()
{
gets(s);
scanf("%d\n", &n);
gets(sw);
}
void solution()
{
if(n)
for(int i = 0; i < n; ++ i)
{
p = s;
v[sw[i] - 'A'] = v[sw[i] - 'A'] ^ 1;
printf("%d", eval());
}
else printf("%d", eval());
}
int main()
{
read();
solution();
return 0;
}