Pagini recente » Cod sursa (job #2184398) | Cod sursa (job #1286159) | Cod sursa (job #3209643) | Cod sursa (job #2714057) | Cod sursa (job #84425)
Cod sursa(job #84425)
#include<stdio.h>
int a[1010],na=0,v[40];
int alpha(char x)
{return (x>='A'&&x<='Z');}
int andd(int x,int y)
{
if(x==1&&y==1) return 1;
return 0;
}
int orr(int x,int y)
{
if(x==0&&y==0) return 0;
return 1;
}
int nott(int x)
{
if(x==0) return 1;
return 0;
}
int eval(int li,int lf)
{
if(li==lf)
if(a[li]>=50)
return (a[li]-50);
else return v[a[li]];
else
{
int min=110,par=0,i,poz,nr=1001;
for(i=li;i<=lf;i++)
if(a[i]==27) par++;
else
if(a[i]==28) par--;
else
{
if(par==0&&a[i]>30&&a[i]<50&&a[i]<min)
min=a[i],poz=i;
if(par<nr) nr=par;
}
if(min==110)
return eval(li+nr,lf-nr);
else
if(min==33)
return nott(eval(poz+1,lf));
else
if(min==32)
return andd(eval(li,poz-1),eval(poz+1,lf));
else
return orr(eval(li,poz-1),eval(poz+1,lf));
}
}
int main()
{
FILE *fin=fopen("bool.in","r"),
*fout=fopen("bool.out","w");
char s[1010],ch;
int i,n;
fgets(s,1010,fin);
for(i=0;s[i]!='\n';i++)
if(s[i]!=' ')
{
if(s[i]=='(')
a[++na]=27;
else
if(s[i]==')') a[++na]=28;
else
if(alpha(s[i]))
if(alpha(s[i+1]))
{
if(s[i]=='N')
a[++na]=33,i+=2;
else
if(s[i]=='O')
a[++na]=31,i++;
else
if(s[i]=='A')
a[++na]=32,i+=2;
else
if(s[i]=='T')
a[++na]=51,i+=3;
else
a[++na]=50,i+=4;
}
else
a[++na]=s[i]-'A'+1;
}
fscanf(fin,"%d",&n);
for(i=1;i<=26;i++) v[i]=0;
ch=fgetc(fin);
for(i=1;i<=n;i++)
{
ch=fgetc(fin);
if(v[ch-'A'+1]==1)
v[ch-'A'+1]=0;
else v[ch-'A'+1]=1;
fprintf(fout,"%d",eval(1,na));
}
fprintf(fout,"\n");
fcloseall();
return 0;
}