Pagini recente » Cod sursa (job #2998940) | Profil florinhaja | Cod sursa (job #2428958) | Cod sursa (job #1164964) | Cod sursa (job #907621)
Cod sursa(job #907621)
#include <stdio.h>
#include <assert.h>
using namespace std;
FILE *fi = fopen ("bool.in", "r");
FILE *fo = fopen ("bool.out", "w");
const int dim = 1003;
char F[dim], E[dim], M[dim], *P;
int N;
int foor ();
int fand ();
int fxor ();
int fpar ();
void citire ()
{
int k = -1;
char aux[dim];
fgets (E, dim, fi);
fscanf (fi, "\n%d\n", &N);
fgets (M, dim, fi);
for (int i = 0; E[i]; i++)
{
if (E[i] == ' ')
continue;
aux[++k] = E[i];
if (E[i] == 'A' && E[i+1] == 'N' && E[i+2] == 'D')
aux[k] = '&', i += 2;
else if (E[i] == 'O' && E[i+1] == 'R')
aux[k] = '|', i += 1;
else if (E[i] == 'N' && E[i+1] == 'O' && E[i+2] == 'T')
aux[k] = '1', aux[++k] = '^', i += 2;
else if (E[i] == 'T' && E[i+1] == 'R' && E[i+2] == 'U' && E[i+3] == 'E')
aux[k] = '1', i += 3;
else if (E[i] == 'F' && E[i+1] == 'A' && E[i+2] == 'L' && E[i+3] == 'S' && E[i+4] == 'E')
aux[k] = '0', i += 4;
}
for (int i = 0; i <= k; i++)
E[i] = aux[i];
E[k + 1] = 0;
}
int foor ()
{
int r = fand ();
while (*P == '|')
{
P++;
r |= fand ();
}
return r;
}
int fand ()
{
int r = fxor ();
while (*P == '&')
{
P++;
r &= fxor ();
}
return r;
}
int fxor ()
{
int r = fpar ();
while (*P == '^')
{
P++;
r ^= fpar ();
}
return r;
}
int fpar ()
{
int r = 0;
if (*P == '(')
{
P++;
r = foor ();
}
else if (*P == '0' || *P == '1')
{
r = *P - '0';
}
else if (*P >= 'A' && *P <= 'Z')
{
r = F[*P];
}
else
assert (0);
P++;
return r;
}
int main ()
{
citire ();
for (int i = 0; i < N; i++)
{
F[M[i]] ^= 1;
P = E;
fprintf (fo, "%d", foor ());
}
//printf ("\n%s", E);
return 0;
}