Pagini recente » Profil StarGold2 | Cod sursa (job #2096259) | Cod sursa (job #1880725) | Cod sursa (job #3281609) | Cod sursa (job #2923891)
#include <bits/stdc++.h>
#define ALPHA 30
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
bool v[ALPHA];
int s_length;
bool expresie(const char* s, int& p);
bool termen(const char* s, int& p);
bool factor(const char* s, int& p);
bool numar(const char* s, int& p);
bool expresie(const char* s, int& p){
bool res = termen(s, p);
while (p < s_length && s[p] == '|'){
p++;
res |= termen(s, p);
}
return res;
}
bool termen(const char* s, int& p){
bool res = factor(s, p);
while (p < s_length && s[p] == '&'){
p++;
res &= factor(s, p);
}
return res;
}
bool factor(const char* s, int& p){
bool res, sign = false;
while (s[p] == '!'){
sign ^= 1;
p++;
}
if (s[p] == '('){
p++;
res = (sign ^ expresie(s, p));
p++;
}
else
res = (sign ^ numar(s, p));
return res;
}
bool numar(const char* s, int& p){
bool res;
if (s[p] == '1')
res = true;
else if (s[p] == '0')
res = false;
else
res = v[s[p] - 'A'];
p++;
return res;
}
int main(){
string s, sq, str;
int q, p, i, lg;
getline(fin, s);
s_length = s.size();
str = s;
lg = 1;
for (i = 1; i < s_length; i++)
if (s[i - 1] == 'O' && s[i] == 'R'){
lg--;
str[lg++] = '|';
}
else
str[lg++] = s[i];
s_length = lg;
s = str;
lg = 2;
for (i = 2; i < s_length; i++)
if (s[i - 2] == 'A' && s[i - 1] == 'N' && s[i] == 'D'){
lg -= 2;
str[lg++] = '&';
}
else
str[lg++] = s[i];
s_length = lg;
s = str;
lg = 2;
for (i = 2; i < s_length; i++)
if (s[i - 2] == 'N' && s[i - 1] == 'O' && s[i] == 'T'){
lg -= 2;
str[lg++] = '!';
}
else
str[lg++] = s[i];
s_length = lg;
s = str;
lg = 3;
for (i = 3; i < s_length; i++)
if (s[i - 3] == 'T' && s[i - 2] == 'R' && s[i - 1] == 'U' && s[i] == 'E'){
lg -= 3;
str[lg++] = '1';
}
else
str[lg++] = s[i];
s_length = lg;
s = str;
lg = 4;
for (i = 4; i < s_length; i++)
if (s[i - 4] == 'F' && s[i - 3] == 'A' && s[i - 2] == 'L' && s[i - 1] == 'S' && s[i] == 'E'){
lg -= 4;
str[lg++] = '0';
}
else
str[lg++] = s[i];
s_length = lg;
s = str;
lg = 0;
for (i = 0; i < s_length; i++)
if (!isspace(s[i]))
str[lg++] = s[i];
s_length = lg;
s = str;
for (i = 0; i < s_length; i++)
cout << s[i];
fin >> q >> sq;
for (i = 0; i < q; i++){
v[sq[i] - 'A'] ^= 1;
p = 0;
fout << expresie(s.c_str(), p);
}
fout << "\n";
return 0;
}