Pagini recente » Cod sursa (job #133768) | Cod sursa (job #685057) | Cod sursa (job #1173558) | Cod sursa (job #758935) | Cod sursa (job #907814)
Cod sursa(job #907814)
#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, sir[2010];
bool v[110], aux;
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);
j=0;
for(i=1; i<=m; i++)
{
if(s[i]=='A' && s[i+1]=='N' && s[i+2]=='D')
{
sir[++j]='&';
i+=3;
}
else if(s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E')
{
sir[++j]='1';
i+=4;
}
else if(s[i]=='F' && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S' && s[i+4]=='E')
{
sir[++j]='0';
i+=5;
}
else if(s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
{
sir[++j]='^';
i+=3;
}
else if(s[i]=='O' && s[i+1]=='R')
{
sir[++j]='|';
i+=2;
}
}
m=j;
sir[j+1]='\n';
for(i=0; i<n; i++)
{
v[ c[i]-'A' ]^=1;
a=sir;
aux=OR();
if(aux==0)
aux=1;
else
aux=0;
g<<aux;
}
g.close();
return 0;
}