Pagini recente » Cod sursa (job #987358) | Cod sursa (job #2956193) | Cod sursa (job #1354618) | Cod sursa (job #1866617) | Cod sursa (job #988397)
Cod sursa(job #988397)
#include <cstdio>
#include <bitset>
#include <iostream>
#include <cstring>
using namespace std;
const int SMAX = 1003, NMAX = 103;
bitset <26> val;
char S[SMAX], C[NMAX], *p;
bool _or ();
bool _and ();
bool _not ();
inline bool sub_expression ();
int main () {
freopen ("bool.in", "r", stdin);
freopen ("bool.out", "w", stdout);
int N, i;
cin.get (S + 1, SMAX);
S[strlen (S + 1) + 1] = ' ';
scanf ("%d%s", &N, C + 1);
for (i = 1; i <= N; ++i) {
val.flip (C[i] - 'A');
p = S + 1;
C[i] = _or () + '0';
}
printf ("%s", C + 1);
}
bool _or () {
bool value = _and (), _value;
if (*p == ' ')
++p;
while (*p == 'O' && p[1] == 'R') {
p += 2;
_value = _and ();
value = value || _value;
if (*p == ' ')
++p;
}
return value;
}
bool _and () {
bool value = _not (), _value;
if (*p == ' ')
++p;
while (*p == 'A' && p[1] == 'N') {
p += 3;
_value = _not ();
value = value && _value;
if (*p == ' ')
++p;
}
return value;
}
bool _not () {
bool value, _value = 0;
if (*p == ' ')
++p;
while (*p == 'N' && p[1] == 'O') {
p += 3;
_value = !_value;
if (*p == ' ')
++p;
}
value = _value ? !sub_expression () : sub_expression ();
return value;
}
inline bool sub_expression () {
bool value;
if (*p == ' ')
++p;
if (*p == '(') {
++p;
value = _or ();
++p;
return value;
}
if (*p == 'T' && p[1] == 'R') {
p += 4;
return 1;
}
if (*p == 'F' && p[1] == 'A') {
p += 5;
return 0;
}
if (*p <= 'Z' && *p >= 'A' && (p[1] == ' ' || p[1] == ')')) {
value = val[*p - 'A'];
++p;
return value;
}
}