Pagini recente » Cod sursa (job #74162) | Cod sursa (job #2699290) | Cod sursa (job #39196) | Cod sursa (job #1798896) | Cod sursa (job #1563634)
#include <fstream>
#include <string>
using namespace std;
string v;
char b[2000];
char s[500];
bool a[26];
bool c[500];
bool isOperator(int x)
{
if((v[x] == 'A' && v[x+1] == 'N') || (v[x] == 'O' && v[x+1] == 'R') || (v[x] == 'N' && v[x+1] == 'O'))
return true;
else return false;
}
bool isOperator2(int x)
{
if((b[x] == 'A' && b[x+1] == 'N') || (b[x] == 'O' && b[x+1] == 'R') || (b[x] == 'N' && b[x+1] == 'O'))
return true;
else return false;
}
int priority(char x)
{
if(x == 'N')
return 3;
if(x == 'O')
return 1;
if(x == 'A')
return 2;
return 0;
}
int main()
{
ofstream out("bool.out");
ifstream in("bool.in");
int n, j = 0, k = 0, z = 0;
getline(in, v);
for(int i = 0; i < v.size();)
{
if(v[i] == '(')
s[k++] = v[i++];
if(v[i] == 'T' && v[i+1] == 'R')
{
b[j++] = 'T';
b[j++] = 'R';
b[j++] = 'U';
b[j++] = 'E';
b[j++] = ' ';
i+=4;
}
if(v[i] == 'F' && v[i+1] == 'A')
{
b[j++] = 'F';
b[j++] = 'A';
b[j++] = 'L';
b[j++] = 'S';
b[j++] = 'E';
b[j++] = ' ';
i+=5;
}
if(isOperator(i))
{
while(k!=0 && priority(s[k-1]) >= priority(v[i]))
{
k--;
if(s[k] == 'N')
{
b[j++] = 'N';
b[j++] = 'O';
b[j++] = 'T';
b[j++] = ' ';
}
if(s[k] == 'O')
{
b[j++] = 'O';
b[j++] = 'R';
b[j++] = ' ';
}
if(s[k] == 'A')
{
b[j++] = 'A';
b[j++] = 'N';
b[j++] = 'D';
b[j++] = ' ';
}
}
s[k++] = v[i];
if(v[i] == 'O') i--;
i+=3;
}
else if(65 <=v[i] && v[i] <= 90)
{
b[j++] = v[i++];
b[j++] = ' ';
}
if(v[i] == ')')
{
while(k!=0 && s[k-1]!='(')
{
k--;
if(s[k] == 'N')
{
b[j++] = 'N';
b[j++] = 'O';
b[j++] = 'T';
b[j++] = ' ';
}
if(s[k] == 'O')
{
b[j++] = 'O';
b[j++] = 'R';
b[j++] = ' ';
}
if(s[k] == 'A')
{
b[j++] = 'A';
b[j++] = 'N';
b[j++] = 'D';
b[j++] = ' ';
}
}
k--;
i++;
}
if(v[i] == ' ')
i++;
}
while(k!=0)
{
k--;
if(s[k]!='(')
{
if(s[k] == 'N')
{
b[j++] = 'N';
b[j++] = 'O';
b[j++] = 'T';
b[j++] = ' ';
}
if(s[k] == 'O')
{
b[j++] = 'O';
b[j++] = 'R';
b[j++] = ' ';
}
if(s[k] == 'A')
{
b[j++] = 'A';
b[j++] = 'N';
b[j++] = 'D';
b[j++] = ' ';
}
}
}
//out << j << "\n";
//for(int i = 0; i<=j; i++)
//out<<b[i];
in >> n;
//a['B'-'A'] = true;
//a['C'-'A'] = true;
for(int i = 1; i <= n; i++)
{
char t;
in >> t;
a[t-'A'] = not a[t-'A'];
z = 0;
for(int l = 0; l<=j;)
{
if(b[l] == 'T' && b[l+1] == 'R')
{
c[z++] = true;
l+=4;
}
else if(b[l] == 'F' && b[l+1] == 'A')
{
c[z++] = true;
l+=5;
}
else if(isOperator2(l))
{
if(b[l] == 'N')
{
c[z-1] = not(c[z-1]);
l+=3;
}
if(b[l] == 'A')
{
z--;
c[z-1] = c[z-1] and c[z];
l+=3;
}
if(b[l] == 'O')
{
z--;
c[z-1] = c[z-1] or c[z];
l+=2;
}
}else if(65<=b[l] && b[l]<=90)
c[z++] = a[b[l++]-'A'];
else l++;
}
out << (int)c[0];
}
}