Pagini recente » Cod sursa (job #12227) | Cod sursa (job #2439309) | Cod sursa (job #3291173) | Cod sursa (job #2589702) | Cod sursa (job #942216)
Cod sursa(job #942216)
#include "stdafx.h"
#include <fstream>
#include <string.h>
using namespace std;
char x[2000];
char s[2000];
int k=0,n;
struct alfabet
{
char l;
bool b;
};
alfabet v[25];
void atr()
{
int k2=1;
for(char x='A';x<='Z';x++)
{
v[k2].l=x;
v[k2].b=false;
k2++;
}
}
bool value(int i)
{
for(int j=1;j<=25;j++)
{
if(v[j].l==s[i])
return v[j].b;
}
return false;
}
bool litera(char a)
{
if(a>='A' && a<='Z')
return true;
else
return false;
}
void inlocuire ()
{
k=0;
for(int i=0;i<n;i++)
{
if(litera(s[i]) && !litera(s[i+1]) && (i==0 || !litera(s[i-1])))
if(value(i))
{
x[k]='T';
x[k+1]='R';
x[k+2]='U';
x[k+3]='E';
k=k+4;
}
else
{
x[k]='F';
x[k+1]='A';
x[k+2]='L';
x[k+3]='S';
k=k+4;
}
else
{
x[k]=s[i];
k++;
}
}
}
bool NOT ()
{
bool changed = false;
int j;
for(int i=0;i<=k;i++) // posibil pana la k-1
{
if(x[i]=='N' && x[i+1]=='O' && x[i+2]=='T' && x[i+3]==' ')
{
if (x[i+4]=='T')
{
x[i]='F';
x[i+1]='A';
x[i+2]='L';
x[i+3]='S';
j=i+8;
while(j<=k)
{
x[j-4]=x[j];
j++;
}
k -= 4;
changed = true;
}
if (x[i+4]=='F')
{
x[i]='T';
x[i+1]='R';
x[i+2]='U';
x[i+3]='E';
j=i+8;
while(j<=k)
{
x[j-4]=x[j];
j++;
}
k -= 4;
changed = true;
}
}
}
return changed;
}
void change_false()
{
int i , j ;
for(i=0;i<n;i++)
if(s[i]=='F' && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S' && s[i+4]=='E')
{
j=i+5;
while(j<n)
{
s[j-1]=s[j];
j++;
}
n--;
}
}
bool and_or_not()
{
bool changed = false;
int i,j;
for(i=0;i<=k;i++)
{
if(x[i]=='O' && x[i+1]=='R')
if(x[i-2]!=')' && x[i-1]==' ' && x[i+2]==' ' && x[i+3]!='N' && x[i+3]!='(')
{
bool a=true , b=true;
if(x[i-2]=='S') a=false;
if(x[i+3]=='F') b=false;
if(a || b)
{
x[i-5]='T';
x[i-4]='R';
x[i-3]='U';
x[i-2]='E';
j=i+7;
while(j<=k)
{
x[j-8]=x[j];
j++;
}
k -= 8;
}
else
{
x[i-5]='F';
x[i-4]='A';
x[i-3]='L';
x[i-2]='S';
j=i+7;
while(j<=k)
{
x[j-8]=x[j];
j++;
}
k -= 8;
}
changed = true;
}
if(x[i]=='A' && x[i+1]=='N' && x[i+2]=='D')
if(x[i-2]!=')' && x[i-1]==' ' && x[i+3]==' ' && x[i+4]!='N' && x[i+4]!='(')
{
bool a=true , b=true;
if(x[i-2]=='S') a=false;
if(x[i+4]=='F') b=false;
if(a && b)
{
x[i-5]='T';
x[i-4]='R';
x[i-3]='U';
x[i-2]='E';
j=i+8;
while(j<=k)
{
x[j-9]=x[j];
j++;
}
k -= 9;
}
else
{
x[i-5]='F';
x[i-4]='A';
x[i-3]='L';
x[i-2]='S';
j=i+8;
while(j<=k)
{
x[j-9]=x[j];
j++;
}
k -= 9;
}
changed = true;
}
}
return changed;
}
bool remove()
{
bool changed=false;
int i, j;
for(i=0;i<=k;i++)
{
if(x[i]=='(' && x[i+5]==')')
{
j=i+1;
while(x[j]!=')')
{
x[j-1]=x[j];
j++;
}
j++;
while(j<=k)
{
x[j-2]=x[j];
j++;
}
k -= 2;
changed=true;
}
}
return changed;
}
void mod_vect (char B)
{
for(int i=1; i<=25; i++)
{
if(v[i].l==B)
{
v[i].b = !v[i].b;
return;
}
}
}
void not_paranteza()
{
for(int i=0;i<k;i++)
if(s[i] == 'N' && s[i+1]=='O' && s[i+2]=='T' && s[i+3]=='(' )
{
for(int j=n;j>i+2;j--)
s[j+1]=s[j];
s[i+3]=' ';
n++;
}
}
int main()
{
int l; //
char s1[101]; //
int f;
ifstream F("bool.in");
ofstream G("bool.out");
F.get(s,2000);
n=strlen(s);
F>>l; //
F.get(); //
F.get(s1,101); //
f=strlen(s1);
atr();
not_paranteza();
change_false();
//for(int i=0;i<n;i++)
// G<<s[i];
//G<<endl;
for( int v=0;v<l;v++) //
{
mod_vect(s1[v]); //
inlocuire();
//for(int i=0;i<k;i++)
// G<<x[i];
//G<<endl;
bool stop = false;
while(!stop)
{
stop=true;
while ( NOT() )
stop=false ;
while ( and_or_not() )
stop=false;
while ( remove() )
stop=false ;
}
if(x[0] == 'F' ) G<<"0";
else G<<"1";
//for(int i=0;i<k;i++)
// G<<x[i];
//G<<endl<<endl;
}
G<<"\n";
return 0;
}