Cod sursa(job #320562)

Utilizator ooctavTuchila Octavian ooctav Data 5 iunie 2009 00:04:39
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
// bool.cpp : Defines the entry point for the console application.
//

#include <stdio.h>
# include <string.h>
#define AND e[p]=='A' && e[p+1]=='N' && e[p+2]=='D'
# define OR e[p]=='O'                       && e[p+1]=='R'
#define TRUE e[p]=='T' && e[p+1]=='R' && e[p+2]=='U' && e[p+3]=='E'
#define FALSE e[p]=='F' && e[p+1]=='A' && e[p+2]=='L' && e[p+3]=='S' && e[p+4]=='E'


int va[200];
char e[1001];
int p=0;
int n,ra,c,st;
int termen();

int evaluare()
{
	int a=termen(),d;
	while(e[p]==' ')
		p++;
	while(AND || OR)
		if(AND)
		{
			p=p+3;
			d=termen();
			if(d && a)
				a=true;
			else 
				a=false;
		}
		else if(OR)
		{
			p=p+2;
			d=termen();
			if(d || a)
				a=true;
			else
				a=false;
		}

	return a;
}

int termen()
{
	int a,ne=0;
	while(e[p]==' ')
		p++;
	if(TRUE)
	{
		p=p+4;
		a=1;
		return a;
	}
	if(FALSE)
	{
		p=p+5;
		a=0;
		return a;
	}
	while(e[p]=='N' && e[p+1]=='O' && e[p+2]=='T')
	{
		ne=!ne;
		p=p+3;
	}
	while(e[p]==' ')
		p++;
	if(e[p]>=65 && e[p]<=90)
	{
		if(ne==0)
			a=va[e[p]];
		else
			a=!va[e[p]];
		p++;
	}
	else if(e[p]=='(')
	{
		p++;
		a=evaluare();
		p++;
	}

	return a;

}
int main()
{
	freopen("bool.in","r",stdin);
	freopen("bool.out","w",stdout);
	fgets(e,1000,stdin);
	scanf("%d\n",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%c",&c);
		va[c]=!va[c];
		ra=evaluare();
		printf("%d",ra);
		p=0;
	}


	return 0;
}