Cod sursa(job #339631)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 10 august 2009 18:10:59
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#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;
}