Pagini recente » Cod sursa (job #1733374) | Cod sursa (job #2148168) | Cod sursa (job #2237041) | Arhiva de probleme | Cod sursa (job #907808)
Cod sursa(job #907808)
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int n, i, m, j, p, u;
char s[2010], c[110], *a;
bool v[110];
int OR();
int AND();
int NSP();
int AND(){
int rez=NSP();
while( (*a)=='&' )
{
p++;
rez&=NSP();
}
return rez;
}
int NSP(){
int rez;
if( (*a)=='(' )
{
p++;
rez=OR();
p++;
}
else
{
if( (*a) == '^' )
{
p++;
rez=NSP();
rez^=1;
}
else
{
if( (*a)=='1' )
{
rez = 1;
p++;
}
else
{
if( (*a)=='0' )
{
rez=0;
p++;
}
else
{
rez=v[ (*a)-'A' ];
p++;
}
}
}
}
return rez;
}
int OR(){
int rez=AND();
while( (*a)== '|' )
{
p++;
rez|=AND();
}
return rez;
}
int main(){
f.get(s+1, 2000);
f.get();
f>>n;
f.get();
f.get(c, n);
f.close();
m=strlen(s+1);
for(i=1; i<=m; i++)
{
if(s[i]=='A' && s[i+1]=='N' && s[i+2]=='D')
{
strcpy(s+i+1, s+i+3);
s[i]='&';
m-=2;
}
else if(s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E')
{
strcpy(s+i+1, s+i+4);
s[i]='1';
m-=3;
}
else if(s[i]=='F' && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S' && s[i+4]=='E')
{
strcpy(s+i+1, s+i+5);
s[i]='0';
m-=4;
}
else if(s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
{
strcpy(s+i+1, s+i+3);
s[i]='^';
m-=2;
}
else if(s[i]=='O' && s[i+1]=='R')
{
strcpy(s+i+1, s+i+2);
s[i]='|';
m--;
}
}
p=2;
u=2;
j=m;
while(u<=m)
{
if(s[u]==' ')
{
j--;
u++;
}
s[p]=s[u];
p++;
u++;
}
s[u+1]='\n';
for(i=0; i<n; i++)
{
v[ c[i]-'A' ]^=1;
a=s;
g<<( OR()^1 );
}
g.close();
return 0;
}