Pagini recente » Cod sursa (job #2068539) | Cod sursa (job #2448255) | Borderou de evaluare (job #156939) | Cod sursa (job #488512) | Cod sursa (job #135366)
Cod sursa(job #135366)
#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 (!p && s[inc]=='(')
//inc++;
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;
else
if (y>=6 && s[0]=='F' && s[1]=='A' && s[2]=='L' && s[3]=='S' && s[4]=='E')
w=0;
else
{
char q;
q=s[y-1];
w=l[q-65];
}
if (w!=0 && w!=1)
printf("!!%d\n",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;
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);
if (z==0)
z=1;
else
z=0;
// if (z!=0 && z!=1)
// printf("!!%d\n",z);
return z;
}
else
if (aa)
{
s[aa]=0;
w=s+inc;
z=rezolvare(w);
w=s+aa+4;
x=rezolvare(w);
if (z==1 && x==1)
z=1;
else
z=0;
// if (z!=0 && z!=1)
// printf("!!%d\n",z);
return z;
}
else
if (oo)
{
s[oo]=0;
w=s+inc;
z=rezolvare(w);
w=s+oo+3;
x=rezolvare(w);
if (z==0 && x==0)
z=0;
else
z=1;
// if (z!=0 && z!=1)
// printf("!!%d\n",z);
return z;
}
else if (strlen(s))
return litera(s+inc);
}
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;
}