Pagini recente » Cod sursa (job #1659716) | Cod sursa (job #2060142) | Cod sursa (job #2454405) | Cod sursa (job #1376602) | Cod sursa (job #2815773)
#include<fstream>
#include<iostream>
#include<climits>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
//ifstream f("in.in");
//ofstream g("out.out");
ifstream f("bool.in");
ofstream g("bool.out");
bool expresie();
bool caracter();
char s[1003],u[300];
int i=0;
int main()
{
for(int l=1;l<=298;l++)
u[l]=0;
f.get(s,1001);
int n;
char c;
f>>n;
for(int ll=1;ll<=n;ll++)
{
f>>c;
i=0;
u[int(c)]=1-u[int(c)];
g<<expresie();
//cout<<'\n'<<"--------------------"<<'\n'<<'\n';
}
f.close();
g.close();
return 0;
}
bool expresie()
{
int k=0;
short v[1001];
///cout<<"x"<<'\n';
int r=caracter();
k++;
v[k]=r;
i++;
while(((s[i]=='O'&&s[i+1]=='R')||
(s[i]=='A'&&s[i+1]=='N'&&s[i+2]=='D')||
(s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T'))
&&i<=strlen(s))
{
if(s[i]=='O'&&s[i+1]=='R')
{
i+=3;
k++;
v[k]=-1;
if(s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T')
{
i+=4;
r=caracter();
k++;
v[k]=-3;
k++;
v[k]=r;
}
else
{
r=caracter();
k++;
v[k]=r;
}
}
else if(s[i]=='A'&&s[i+1]=='N'&&s[i+2]=='D')
{
i+=4;
k++;
v[k]=-2;
if(s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T')
{
i+=4;
r=caracter();
k++;
v[k]=-3;
k++;
v[k]=r;
}
else
{
r=caracter();
k++;
v[k]=r;
}
}
else if(s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T')
{
i+=4;
r=caracter();
k++;
v[k]=-3;
k++;
v[k]=r;
}
if(s[i]==' ')
{
i++;
}
else
{
///cout<<"No i++ for i="<<i<<" ";
}
}
/**for(int j=1;j<=k;j++)
cout<<v[j]<<" ";
cout<<'\n';**/
for(int ii=1;ii<k;ii++)
{
if(v[ii]==-3)
{
v[ii+1]=1-v[ii+1];
for(int j=ii;j<=k-1;j++)
v[j]=v[j+1];
k--;
}
}
/**for(int j=1;j<=k;j++)
cout<<v[j]<<" ";
cout<<'\n';**/
for(int ii=1;ii<k;ii++)
{
if(v[ii]==-2)
{
v[ii+1]=v[ii-1]&&v[ii+1];
for(int j=ii-1;j<=k-2;j++)
v[j]=v[j+2];
k-=2;
}
}
/**for(int j=1;j<=k;j++)
cout<<v[j]<<" ";
cout<<'\n';**/
for(int ii=1;ii<k;ii++)
{
if(v[ii]==-1)
{
v[ii+1]=v[ii-1]||v[ii+1];
for(int j=ii-1;j<=k-2;j++)
v[j]=v[j+2];
k-=2;
}
}
/**for(int j=1;j<=k;j++)
cout<<v[j]<<" ";
cout<<'\n';
cout<<'\n'<<"v[1] = "<<v[1]<<'\n';
cout<<"endX: "<<i;**/
return v[1];
}
bool caracter()
{
//cout<<i<<"|"<<s[i]<<": ";
if(s[i]=='(')
{
i++;
int r=expresie();
i++;
//while(s[i]==' ')
//i++;
//cout<<r<<'\n';
///cout<<'\n';
return r;
}
else
{
if(s[i]=='T'&&s[i+1]=='R'&&s[i+2]=='U'&&s[i+3]=='E')
{
i+=5;
///cout<<1<<'\n';
return 1;
}
else if(s[i]=='F'&&s[i+1]=='A'&&s[i+2]=='L'&&s[i+3]=='S'&&s[i+4]=='E')
{
i+=6;
///cout<<0<<'\n';
return 0;
}
else
{
int r=u[(int)s[i]];
i++;
///cout<<"ch: "<<r<<'\n';
return r;
}
}
}