Cod sursa(job #148554)

Utilizator c_sebiSebastian Crisan c_sebi Data 4 martie 2008 15:32:25
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream.h>
#include <string.h>

char e[1005], *p;
int n, val[26];


int OR(char *s);
int AND(char *s);
int evalFact(char *s);

int OR(char e[]){
	int t=AND(e);
	while(*p=='O' && *(p+1)=='R'){ //OR
		p+=2;
		t = t | AND(e);
	}
	return t;
}

int AND (char e[]){
	int t=evalFact(e);
	while(*p=='A' && *(p+1)=='N'){ //AND
		p+=3;
		t = t & evalFact(e);
	}
	return t;
}

int evalFact(char e[]){
	int t, neg=0;
	if(*p=='N' && *(p+1)=='O') {p+=3; neg=1; t=evalFact(e); }
	else if(*p=='('){
		p++;
		t = OR(e);
		p++;
	}
	else
		if(*p=='T' && *(p+1) == 'R') p += 4, t = 1;
		else if(*p=='F' && *(p+1)=='A') p += 5, t = 0;
		else t = val[*p-'A'], p++;

	if(neg) return 1-t;
	return t;
}

void eliminsp(char *s){
	while(*s)
		if(*s==' ') strcpy(s, s+1);
		else s++;
}

int main(){
	char c;
	ifstream f("bool.in"); ofstream g("bool.out");
	f.getline(e, 1001);
	f>>n;
	f.get();
	eliminsp(e);
	while(n--){
		 f.get(c);
		 val[c-'A']=1-val[c-'A'];
		 p=e;
		 g<<OR(e);
	}
	g<<"\n";
	f.close();
	g.close();
	return 0;
}