Cod sursa(job #1874846)

Utilizator Gigel-FroneGigel Fronel Gigel-Frone Data 10 februarie 2017 14:47:55
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <cstdio>
#include <string>
#include <iostream>

using namespace std;

bool v[30];
string s;
int k;

bool f1(), f2(), f3();

bool f1()
{
	bool x=f2();
	while(s[k]=='|')
	{
		k++;
		x|=f2();
	}
	return x;
}
bool f2()
{
	bool x=f3();
	while(s[k]=='&');
	{
		k++;
		x&=f3();
	}
	return x;
}
bool f3()
{
	bool x=0;
	if(s[k]=='!')
	{
		k++;
		return !f3();
	}
	else if(s[k]=='(')
	{
		k++;
		x=f1();
		k++;
		return x;
	}
	else if(s[k]=='1')
	{
		k++;
		return 1;
	}
	else if(s[k]=='0')
	{
		k++;
		return 0;
	}
	return v[s[k]-'A'];
}

void modify()
{
	for(int i=0; i<=s.size(); i++)
	{
		if(s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
		{
			s[i]='!';
			s.erase(i+1, 2);
		}
		else if(s[i]=='O' && s[i+1]=='R')
		{
			s[i]='|';
			s.erase(i+1, 1);
		}
		else if(s[i]=='A' && s[i+1]=='N' && s[i+2]=='D')
		{
			s[i]='&';
			s.erase(i+1, 2);
		}
		else if(s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E')
		{
			s[i]='1';
			s.erase(i+1, 3);
		}
		else if(s[i]=='F' && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S' && s[i+4]=='E')
		{
			s[i]='0';
			s.erase(i+1, 4);
		}
		else if(s[i]==' ')
		{
			s.erase(i, 1);
			i--;
		}
	}
}

int main()
{
	freopen("bool.in", "r", stdin);
	freopen("bool.out", "w", stdout);
	
	getline(cin, s);
	modify();
	int n;
	scanf("%d ", &n);
	char c;	
	
	for(int i=1; i<=n; i++)
	{
		scanf("%c", &c);
		v[c-'A']=!v[c-'A'];
		k=0;
		printf("%d", f1());
	}
}