Pagini recente » Cod sursa (job #1133572) | Cod sursa (job #1327568) | Cod sursa (job #337059) | Cod sursa (job #2493107) | Cod sursa (job #1823724)
#include <fstream>
#include <string.h>
using namespace std;
char s[1005];
char op[1005];
bool ap[26];
int OR(const int&, int&);
int AND(const int&, int&);
int NOT(const int&, int&);
int getNumber(const int&, int&);
int main(){
ifstream fin("bool.in");
ofstream fout("bool.out");
fin.get(s + 1, 1005);
int n = strlen(s + 1);
int i,j;
for(i = 1;i <= n;i++){
if(s[i] == ' '){
for(j = i;j < n;j++){
s[j] = s[j + 1];
}
s[n] = '\0';
n--;
}
}
for(i = 1;i <= n;i++){
if(s[i] == 'A' && s[i + 1] == 'N' && s[i + 2] == 'D'){
s[i] = '&';
for(j = i + 1;j < n - 1;j++){
s[j] = s[j + 2];
}
s[n] = '\0';
s[n - 1] = '\0';
n -= 2;
}else if(s[i] == 'O' && s[i + 1] == 'R'){
s[i] = '|';
for(j = i + 1;j < n;j++){
s[j] = s[j + 1];
}
s[n] = '\0';
n--;
}else if(s[i] == 'N' && s[i + 1] == 'O' && s[i + 2] == 'T'){
s[i] = '!';
for(j = i + 1;j < n - 1;j++){
s[j] = s[j + 2];
}
s[n] = '\0';
s[n - 1] = '\0';
n -= 2;
}else if(s[i] == 'T' && s[i + 1] == 'R' && s[i + 2] == 'U' && s[i + 3] == 'E'){
s[i] = '1';
for(j = i + 1;j < n - 2;j++){
s[j] = s[j + 3];
}
s[n] = '\0';
s[n - 1] = '\0';
s[n - 2] = '\0';
n -= 3;
}else if(s[i] == 'F' && s[i + 1] == 'A' && s[i + 2] == 'L' && s[i + 3] == 'S' && s[i + 4] == 'E'){
s[i] = '0';
for(j = i + 1;j < n - 3;j++){
s[j] = s[j + 4];
}
s[n] = '\0';
s[n - 1] = '\0';
s[n - 2] = '\0';
s[n - 3] = '\0';
n -= 4;
}
}
int N;
fin>>N;
fin>>op + 1;
for(i = 1;i <= N;i++){
ap[op[i] - 'A'] ^= 1;
j = 1;
fout<<OR(n, j);
}
return 0;
}
int OR(const int& n, int& i){
int ret = AND(n, i);
while(i <= n && s[i] == '|'){
i++;
ret |= AND(n, i);
}
return ret;
}
int AND(const int& n, int& i){
int ret = NOT(n, i);
while(i <= n && s[i] == '&'){
i++;
ret &= NOT(n, i);
}
return ret;
}
int NOT(const int& n, int& i){
int ret = 0;
bool change = 0;
while(s[i] == '!'){
change ^= 1;
i++;
}
if(s[i] == '('){
i++;
ret = OR(n, i);
i++;
}else{
if(s[i] >= 'A' && s[i] <= 'Z'){
ret = ap[s[i] - 'A'];
}else{
ret = s[i] - '0';
}
i++;
}
if(change){
return ret ^ 1;
}
return ret;
}