Pagini recente » Cod sursa (job #398092) | Cod sursa (job #3201200) | Cod sursa (job #1248241) | Cod sursa (job #2325859) | Cod sursa (job #794207)
Cod sursa(job #794207)
#include <cstdio>
const int MAX_SIZE(1002);
const int MAX_MODIFY(101);
char expression [MAX_SIZE];
char modify [MAX_MODIFY];
bool values ['Z' + 1];
char *parser;
inline void read (void)
{
std::freopen("bool.in","r",stdin);
std::fgets(expression,MAX_SIZE,stdin);
int x;
std::scanf("%d\n%s",&x,modify);
std::fclose(stdin);
}
bool priority1 (void);
bool priority2 (void);
bool priority3 (void);
inline void skip (void)
{
while (*parser == ' ')
++parser;
}
bool priority1 (void)
{
char result(priority2());
while (*parser == 'O' && parser[1] == 'R')
{
parser += 2;
result = result || priority2();
}
return result;
}
bool priority2 (void)
{
char result(priority3());
while (*parser == 'A' && parser[1] == 'N')
{
parser += 3;
result = result && priority3();
}
return result;
}
bool priority3 (void)
{
bool result;
skip();
if (*parser == '(')
{
++parser;
result = priority1();
++parser;
}
else
{
int negations(0);
while (*parser == 'N' && parser[1] == 'O')
{
++negations;
parser += 3;
skip();
}
if (*parser == 'T' && parser[1] == 'R')
result = true;
else if (*parser == 'F' && parser[1] == 'A')
result = false;
else
result = values[*parser];
if (negations % 2)
result = !result;
}
return result;
}
inline void print (void)
{
std::freopen("bool.out","w",stdout);
for (char *iterator(modify) ; *iterator ; ++iterator)
{
values[*iterator] = !values[*iterator];
parser = expression;
if (priority1())
std::putchar('1');
else
std::putchar('0');
}
std::putchar('\n');
std::fclose(stdout);
}
int main (void)
{
read();
print();
return 0;
}