Pagini recente » Cod sursa (job #1902037) | Cod sursa (job #1585643) | Cod sursa (job #2730566) | Cod sursa (job #301372) | Cod sursa (job #2969054)
#include <bits/stdc++.h>
using namespace std;
const int MAX_LETT = 30;
string line, lineAux;
string line1;
string line2;
int letter[MAX_LETT];
int pos;
int expresie();
int factor();
int expresie() {
int val = factor();
if (line1[pos] == '$' || line1[pos] == '%') {
if (line1[pos] == '$') {
pos++; val = val & factor();
} else {
pos++; val = val | factor();
}
}
return val;
}
int factor() {
int sign = 0; int val;
while (line1[pos] == '!') {
sign = 1; pos++;
}
if (line1[pos] == '(') {
pos++; val = expresie(); pos++;
return (sign + val) % 2;
}
return (sign + letter[line1[pos++] - 'A']) % 2;
}
int main() {
ifstream fin;
ofstream fout;
int n;
int i, j;
char ch;
fin.open("bool.in");
fout.open("bool.out");
getline(fin, line);
fin >> n;
for (i = 0; i < n; i++) {
do {
fin.get(ch);
} while (!isalpha(ch));
line2.push_back(ch);
}
j = 0; lineAux.resize((int)line.size());
for (i = 0; i < (int)line.size(); i++) {
lineAux[j++] = line[i];
if (j > 2) {
if (lineAux[j - 1] == 'D' && lineAux[j - 2] == 'N' && lineAux[j - 3] == 'A') {
j = j - 3; lineAux[j] = '$'; j++;
}
if (lineAux[j - 1] == 'R' && lineAux[j - 2] == 'O') {
j = j - 2; lineAux[j] = '%'; j++;
}
if (lineAux[j - 1] == 'T' && lineAux[j - 2] == 'O' && lineAux[j - 3] == 'N') {
j = j - 3; lineAux[j] = '!'; j++;
}
if (lineAux[j - 1] == 'E' && lineAux[j - 2] == 'U' && lineAux[j - 3] == 'R' && lineAux[j - 4] == 'T') {
j = j - 4; lineAux[j] = '*'; j++;
}
if (lineAux[j - 1] == 'E' && lineAux[j - 2] == 'S' && lineAux[j - 3] == 'L' && lineAux[j - 4] == 'A' && lineAux[j - 5] == 'F') {
j = j - 5; lineAux[j] = '^'; j++;
}
}
}
line1.resize((int)lineAux.size()); i = 0; j = 0;
while (i < (int)lineAux.size()) {
while (isspace(ch = lineAux[i]))
i++;
line1[j++] = lineAux[i];
i++;
}
//for (int i = 0; i < (int)line1.size(); i++)
//cout << line1[i];
for (i = 0; i < n; i++) {
pos = 0; letter[line2[i] - 'A'] = (letter[line2[i] - 'A'] + 1) % 2;
fout << expresie();
}
//fout << n;
//fout << '\n';
//fout << (int)lineAux.size();
//fout << '\n';
/* fout << '\n';
fout << (int)lineAux.size();
for (int i = 0; i < (int)line2.size(); i++)
fout << line2[i];
fout << '\n'; */
fin.close();
fout.close();
return 0;
}