Cod sursa(job #1834408)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 24 decembrie 2016 15:32:01
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include<iostream>
#include<fstream>
#include<cstring>
#include<string>
using namespace std;

string s;
bool aux[130];
int i,l,n;

string parse(string s) {
  string result="";
  int i=0;
  
  while (i<s.length()) {
  	
  	if (s[i]==' ') { ++i; continue; }
  	
    if (i<s.length()-2 && s[i]=='A' && s[i+1]=='N' && s[i+2]=='D') { result+='a'; i+=3; }
    else if (i<s.length()-2 && s[i]=='N' && s[i+1]=='O' && s[i+2]=='T') { result+='n'; i+=3; }
    else if (i<s.length()-1 && s[i]=='O' && s[i+1]=='R') { result+='o'; i+=2; }
    else if (i<s.length()-3 && s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E') { result+='t'; i+=4; }
    else if (i<s.length()-3 && s[i]=='F' && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S') { result+='f'; i+=5; }
    else { result+=s[i]; ++i; }
   
  }
  
  return result;
	
}

bool evalOR();

bool evalNot() {
	
   if (s[l]=='n') {
     ++l;
     return 1-evalNot();
   }
   else 
   if (s[l]=='(') {
   	 ++l; 
   	 bool r=evalOR();
   	 ++l;
   	 return r;
   }
   else {
   	++l;
    return aux[s[l-1]];
    }
	
}

bool evalAnd() {
   bool andFactor = evalNot();
   
   while (s[l]=='a') {
      ++l;
      andFactor&=evalNot();
   }
   
   return andFactor;
}

bool evalOR() {
  bool orFactor = evalAnd();
  
  while (s[l]=='o') {
       ++l;
       orFactor|=evalAnd();
  }
  
  return orFactor;
}

int main(void) {
	ifstream cin("bool.in");
	ofstream cout("bool.out");
	
	getline(cin,s);
//	cout<<s<<"\n";
	s=parse(s);
//	cout<<s<<"\n";
	
	cin>>n;
	char ch;
	
	aux['t']=1;
	aux['f']=0;
	
	for (i=1; i<=n; ++i) {
	    cin>>ch;
		aux[ch]=1-aux[ch];
		l=0;
		cout<<evalOR();	
	}	
	
	return 0;
}