Cod sursa(job #1047322)

Utilizator razvan2006razvan brezulianu razvan2006 Data 4 decembrie 2013 11:22:26
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>

char S[10009], A[301], n, i;

int evalAnd();
int evalOr();
int getTerm();

int evalAnd() {
	int X = getTerm();
	while (S[i + 1] == 'A' && S[i + 2] == 'N' && S[i + 3] == 'D') {
		i += 5;
		X &= getTerm();
	}
	return X;
}

int evalOr() {
	int X = evalAnd();
	while (S[i + 1] == 'O' && S[i + 2] == 'R') {
		i += 4;
		X |= evalAnd();
	}
	return X;
}

int getTerm () {
	int v = 0;
	
	if (S[i] == 'N' && S[i + 1] == 'O') {
		i += 4;
		return (!getTerm());
	}
	if (S[i] == '(') {
		i++;
		return v = evalOr();
		i++;
	}
	if (S[i] == 'T' && S[i + 1] == 'R') {
		i += 4;
		return 1;
	}
	if (S[i] == 'F' && S[i + 1] == 'A') {
		i += 5;
		return 0;
	}
	if (S[i] >= 'A' && S[i] <= 'Z') {
		v = A[S[i]];
		i++;
		return v;
	}
}	

int main () {
	freopen ("bool.in", "rt", stdin);
	freopen ("bool.out", "wt", stdout);
	
	gets(S+1);
	scanf ("%d\n", &n);
	
	while (n) {
		char C; scanf ("%c", &C);
		A[C] ^= 1;
		i = 1;
		printf ("%d", evalOr()); n--;
	}
	
	return 0;
}