Cod sursa(job #564081)

Utilizator andunhillMacarescu Sebastian andunhill Data 26 martie 2011 17:53:10
Problema Bool Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<fstream>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char a[1001],*p,x;
bool v[26];
int N;
bool exp();
bool is(char x)
{	return (x>='A' && x<='Z');
}
bool andd(char *p)
{	if(*p=='A' && *(p+1)=='N' && *(p+2)=='D') return 1;
	return 0;
}
bool orr(char *p)
{	if(*p=='O' && *(p+1)=='R') return 1;
	return 0;
}
bool nott(char *p)
{	if(*p=='N' && *(p+1)=='O' && *(p+2)=='T') return 1;
	return 0;
}
bool truee(char *p)
{	if(*p=='T' && *(p+1)=='R' && *(p+2)=='U' && *(p+3)=='E') return 1; 
	return 0;
}
bool falsee(char *p)
{	if(*p=='F' && *(p+1)=='A' && *(p+2)=='L' && *(p+3)=='S' && *(p+4)=='E') return 1; 
	return 0;
}
bool get()
{	bool rez; int op=-1;
	if(*p==' ') p++;
	if(nott(p)) p+=3 , op=1;
	if(truee(p)) p+=4 , rez=1;
	else if(falsee(p)) p+=5 , rez=0;
	else rez=v[*p];
	if(op==-1) return rez;
	else return !rez;
}
bool fand()
{	bool rez;
	if(*p==' ') p++;
	if(*p=='(') p++ , rez=exp() , p++;
	else rez=get();
}
bool term()
{	bool rez=fand();
	while(andd(p))
		p+=3 , rez&=fand();
	return rez;
}
bool exp()
{	bool rez=term();
	while(orr(p))
		p+=2 , rez|=term();
	return rez;
}
int main()
{	f.get(a,1001);
	f>>N;
	for(int i=1;i<=N;i++)
	{	f>>x; p=a;
		v[x]=(v[x]==0?1:0);
		g<<exp();
	}
	f.close();
	g.close();
	return 0;
}