Pagini recente » Cod sursa (job #929890) | Cod sursa (job #967565) | Cod sursa (job #1889856) | Cod sursa (job #1760365) | Cod sursa (job #339631)
Cod sursa(job #339631)
#include <stdio.h>
#define N 1<<10
#define OR v[poz]=='0' && v[poz+1]=='R'
#define AND v[poz]=='A' && v[poz+1]=='N' && v[poz+2]=='D'
#define NOT v[poz]=='N' && v[poz+1]=='O' && v[poz+2]=='T'
#define TRUE v[poz]=='T' && v[poz+1]=='R' && v[poz+2]=='U' && v[poz+3]=='E'
#define FALSE v[poz]=='F' && v[poz+1]=='A' && v[poz+2]=='L' && v[poz+3]=='S' && v[poz+4]=='E'
#define LITERA v[poz]>='A' && v[poz]<='Z'
char v[N];
int par[N],n,poz,r;
int rang2();
int rang3();
int expr();
int rang1()
{
int rez=rang2(),rez2;
while (OR)
{
poz+=2;
rez2=rang2();
if (!rez && !rez2)
rez=0;
else
rez=1;
}
return rez;
}
int rang2()
{
int rez=rang3(),rez2;
while (AND)
{
poz+=3;
rez2=rang3();
if (rez && rez2)
rez=1;
else
rez=0;
}
return rez;
}
int rang3()
{
int rez=0;
while (NOT)
{
poz+=3;
rez=expr();
if (rez==1)
rez=0;
else
rez=1;
}
return rez;
}
int expr()
{
int rez=0;
if (v[poz]=='(')
{
poz++;
rez=rang1();
poz++;
}
if (TRUE)
{
poz+=4;
return 1;
}
if (FALSE)
{
poz+=5;
return 0;
}
if (LITERA)
{
poz++;
if (par[(int)v[poz]-64]%2)
return 1;
}
return 0;
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
int i,ok=1;
char x;
while (ok)
{
scanf("%c",&x);
if (x!=' ' && x!='\n')
v[++r]=x;
if (x=='\n')
break;
}
scanf("%d\n",&n);
for (i=1; i<=n; i++)
{
scanf("%c",&x);
par[(int)x-64]++;
poz=1;
printf("%d",rang1());
}
return 0;
}