Pagini recente » Cod sursa (job #1804031) | Cod sursa (job #65959) | Cod sursa (job #2713817) | Cod sursa (job #423712) | Cod sursa (job #349494)
Cod sursa(job #349494)
#include<cstdio>
#define N 1001
const int M=(int)'Z'+1;
char s[N],s1[N],s2[N],*p;
short int nr,n;
bool b[M];
int eval();
int termen();
int factor();
void citire()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
fgets(s,N,stdin);
scanf("%hd\n",&n);
fgets(s1,N,stdin);
}
void sir()
{
p=s;
while (*p)
{
if (*p=='A')
{
++p;
if (*p&&*p=='N')
{
s2[nr++]='&';
++p;
++p;
}
else
s2[nr++]='A';
continue;
}
if (*p=='O')
{
++p;
if (*p=='R'&&*p)
{
s2[nr++]='|';
++p;
}
else
s2[nr++]='O';
continue;
}
if (*p=='T')
{
++p;
if (*p&&*p=='R')
{
s2[nr++]='1';
++p;
++p;
++p;
}
else
s2[nr++]='R';
continue;
}
if (*p=='F')
{
++p;
if (*p&&*p=='A')
{
s2[nr++]='0';
++p;
++p;
++p;
++p;
}
else
s2[nr++]='F';
continue;
}
if (*p=='N')
{
++p;
if (*p&&*p=='O')
{
s2[nr++]='!';
++p;
++p;
}
else
s2[nr++]='N';
continue;
}
if (*p=='(')
{
s2[nr++]='(';
++p;
continue;
}
if (*p==')')
{
s2[nr++]=')';
++p;
continue;
}
if (*p>='A'&&*p<='Z')
s2[nr++]=*p;
++p;
}
--nr;
}
int factor ()
{
int r=0;
if (*p=='(')
{
++p;
r=eval();
++p;
}
else
{
if (*p=='1')
r=1;
else
if (*p=='0')
r=0;
if (*p>='A'&&*p<='Z')
r=(int)b[*p-'A'];
++p;
}
return r;
}
int termen()
{
int r;
bool ok=false;
while (*p=='!')
{
++p;
ok=true;
r=factor();
}
if (ok)
return !r;
else
{
r=factor();
return r;
}
}
int eval()
{
int r=termen();
while (*p=='&'||*p=='|')
if(*p=='&')
{
++p;
return r&&termen();
}
else
{
++p;
return r||termen();
}
return r;
}
void teste()
{
char *p1;
p1=s1;
while(*p1>='A'&&*p1<='Z')
{
if (b[*p1-'A'])
b[*p1-'A']=0;
else
b[*p1-'A']=1;
++p1;
p=s2;
//printf("%s",s2);
printf("%d",eval());
}
}
int main()
{
citire();
sir();
//printf("%s",s2);
teste();
return 0;
}