Pagini recente » Cod sursa (job #2725684) | Cod sursa (job #1232533) | Cod sursa (job #869578) | Cod sursa (job #2982208) | Cod sursa (job #2816423)
#include <fstream>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
const int DIM = 1005;
bool val[130];
int n, i;
char s[DIM], a[DIM];
bool lowpriority();
bool midpriority();
bool highpriority();
bool lowpriority(){
bool r = midpriority();
while ( s[i] == 'O' && s[i+1] == 'R' ){
i += 3; /// OR x
r = r | midpriority();
}
return r;
}
bool midpriority(){
bool r = highpriority();
while ( s[i] == 'A' && s[i+1] == 'N' && s[i+2] == 'D' ){
i += 4; ///AND x
r = r & highpriority();
}
return r;
}
bool highpriority(){
bool r;
if ( s[i] == '(' ){
i++; /// (x
r = lowpriority(); /// x
i++; /// x ...
} else {
if ( s[i] == 'N' && s[i+1] == 'O' && s[i+2] == 'T' ){
i += 4; ///NOT x
while (s[i] == ' ')
i++;
r = !lowpriority();
} else {
if ( s[i] == 'F' && s[i+1] == 'A' && s[i+2] == 'L' && s[i+3] == 'S' && s[i+4] == 'E' ){
i += 5; /// FALSE x
while (s[i] == ' ')
i++;
r = false;
} else {
if ( s[i] == 'T' && s[i+1] == 'R' && s[i+2] == 'U' && s[i+3] == 'E' ){
i += 4; /// TRUE x
while (s[i] == ' ')
i++;
r = true;
} else {
if ( s[i] >= 'A' && s[i] <= 'Z' ) {
r = val[ s[i] ];
i += 2;
}
}
}
}
}
return r;
}
int main(){
fin.getline(s, DIM);
fin >> n;
fin >> a;
for (int j = 0; j < n; j++) {
val[ a[j] ] = !val[ a[j] ];
i = 0;
fout << (lowpriority() == false ? '0' : '1');
}
return 0;
}
/// lowpriority = .. or ..
/// midpriority = .. and..
/// highpriority = NOT, ( ), FALSE, TRUE, variabila