Pagini recente » Cod sursa (job #2401777) | Cod sursa (job #940851) | Cod sursa (job #183255) | Cod sursa (job #711670) | Cod sursa (job #135361)
Cod sursa(job #135361)
#include <stdio.h>
#include <string.h>
using namespace std;
char s[1100],a[110],l[30];
int n;
void citire()
{
freopen("bool.in","r",stdin);
fgets(s,1100,stdin);
scanf("%d\n", &n);
fgets(a,110,stdin);
if (a[strlen(a)-1]=='\n')
a[strlen(a)-1]=0;
if (s[strlen(s)-1]=='\n')
s[strlen(s)-1]=0;
fclose(stdin);
}
int deparantezare(char s[], int &inc, int &sf)
{
int p=1, o=0, l=strlen(s)-1;
if (s[inc]=='(' && s[l]==')')
{
for (int i=inc+1; i<l; i++)
{
if (s[i]=='(')
++p;
else
if (s[i]==')')
--p;
if (p==0)
{
o=1;
break;
}
}
if (!o)
{
inc++;
sf--;
s[l]=0;
return 0;
}
}
return 1;
}
int litera(char s[])
{
int w;
int y=strlen(s);
int e=strlen(s)-1;
int inc=0,sf=e;
while (s[inc]=='(')
{
if (deparantezare(s,inc,sf))
break;
}
if (y>=5 && s[y-3]=='T' && s[y-2]=='R' && s[y-1]=='U' && s[y]=='E')
{
w=1;
// for (int i=y; i>=0; i--)
// if (s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
// w=!w;
}
else
if (y>=6 && s[0]=='F' && s[1]=='A' && s[2]=='L' && s[3]=='S' && s[4]=='E')
{
w=0;
// for (int i=y; i>=0; i--)
// if (s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
// w=!w;
}
else
{
char q;
q=s[y-1];
w=l[q-65];
// if (y>2)
// for (int i=y; i>=0; i--)
// if (s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
// w=!w;
}
return w;
}
int rezolvare(char s[])
{
while (s[strlen(s)-1]==' ')
s[strlen(s)-1]=0;
int paranteza=0,p=0,aa=0,oo=0,nt=-1;
//printf("%s\n",s);
int e=strlen(s)-1;
int inc=0,sf=e;
while (s[inc]=='(')
{
if (deparantezare(s,inc,sf))
break;
}
for (int i=sf; i>=inc; i--)
{
if (s[i]==')')
{
--p;
paranteza++;
}
else if (s[i]=='(')
++p;
else if (p==0 && s[i]=='N' && s[i+1]=='O' && s[i+2]=='T' && nt==-1)
nt=i;
else
if (p==0 && s[i]=='A' && s[i+1]=='N' && s[i+2]=='D' && aa==0)
aa=i;
else
if (p==0 && s[i]=='O' && s[i+1]=='R' && oo==0)
oo=i;
}
char *w;
int z,x;
if (nt>=0)
{
s[nt]=0;
w=s+nt+4;
z=rezolvare(w);
return !z;
}
else
if (aa)
{
s[aa]=0;
w=s+inc;
z=rezolvare(w);
w=s+aa+4;
x=rezolvare(w);
return z&x;
}
else
if (oo)
{
s[oo]=0;
w=s+inc;
z=rezolvare(w);
w=s+oo+3;
x=rezolvare(w);
return z|x;
}
else
return litera(s);
}
int main()
{
freopen("bool.out","w",stdout);
citire();
if (n)
for (int i=0; i<n; i++)
{
l[a[i]-65]=!l[a[i]-65];
int e=rezolvare(s);
printf("%d",e);
}
else printf("%d",rezolvare(s));
fclose(stdout);
return 0;
}