Pagini recente » Cod sursa (job #2364896) | Cod sursa (job #628728) | Cod sursa (job #2945568) | Cod sursa (job #2700745) | Cod sursa (job #2421350)
#include <iostream>
#include <cstdio>
using namespace std;
FILE *fin=fopen("bool.in", "r");
FILE *fout=fopen("bool.out", "w");
char ecc[1002], sw[102], ec[1002];
int n, sww[27];
int Paranteza(int poz)
{
char sf=poz==0 ? '\n' : ')';
int x;
if (ec[poz]=='1' || ec[poz]=='0')
x=ec[poz]-'0';
else if (ec[poz]>='A' && ec[poz]<='Z')
x=sww[ec[poz]-'A'];
else if (ec[poz]=='!')
{
if (ec[poz+1]=='1' || ec[poz+1]=='0')
{
x=ec[poz+1]-'0';
poz++;
}
else if (ec[poz+1]>='A' && ec[poz+1]<='Z')
{
x=sww[ec[poz+1]-'A'];
poz++;
}
else if (ec[poz+1]=='(')
{
x=Paranteza(poz+2);
int par=1;
poz+=2;
while (par)
{
if (ec[poz]=='(')
par++;
if (ec[poz]==')')
par--;
poz++;
}
poz--;
}
x=(x+1)%2;
}
else if (ec[poz]=='(')
{
x=Paranteza(poz+1);
int par=1;
poz++;
while (par)
{
if (ec[poz]=='(')
par++;
if (ec[poz]==')')
par--;
poz++;
}
poz--;
}
poz++;
while (ec[poz]!=sf)
{
char semn=ec[poz];
poz++;
int y;
if (ec[poz]=='1' || ec[poz]=='0')
y=ec[poz]-'0';
else if (ec[poz]>='A' && ec[poz]<='Z')
y=sww[ec[poz]-'A'];
else if (ec[poz]=='!')
{
if (ec[poz+1]=='1' || ec[poz+1]=='0')
{
y=ec[poz+1]-'0';
poz++;
}
else if (ec[poz+1]>='A' && ec[poz+1]<='Z')
{
y=sww[ec[poz+1]-'A'];
poz++;
}
else if (ec[poz+1]=='(')
{
y=Paranteza(poz+2);
int par=1;
poz+=2;
while (par)
{
if (ec[poz]=='(')
par++;
if (ec[poz]==')')
par--;
poz++;
}
poz--;
}
y=(y+1)%2;
}
else if (ec[poz]=='(')
{
y=Paranteza(poz+1);
int par=1;
poz++;
while (par)
{
if (ec[poz]=='(')
par++;
if (ec[poz]==')')
par--;
poz++;
}
poz--;
}
poz++;
if (semn=='|')
{
x=x|y;
}
else
{
x=x&y;
}
}
return x;
}
int main()
{
fgets(ecc, 1001, fin);
fscanf(fin, "%d", &n);
fgetc(fin);
fgets(sw, n+1, fin);
int z=0, l=0;
while (ecc[z]!='\n')
{
bool kk=true;
if (ecc[z]=='T')
{
if (ecc[z+1]=='R')
{
z=z+4;
ec[l]='1';
l++;
kk=false;
}
}
if (ecc[z]=='F' && kk)
{
if (ecc[z+1]=='A')
{
z=z+5;
ec[l]='0';
l++;
kk=false;
}
}
if (ecc[z]==' ' && kk)
{
z++;
kk=false;
}
if (ecc[z]=='A' && kk)
{
if (ecc[z+1]=='N')
{
z=z+3;
ec[l]='&';
l++;
kk=false;
}
}
if (ecc[z]=='O' && kk)
{
if (ecc[z+1]=='R')
{
z=z+2;
ec[l]='|';
l++;
kk=false;
}
}
if (ecc[z]=='N' && kk)
{
if (ecc[z+1]=='O')
{
z=z+3;
ec[l]='!';
l++;
kk=false;
}
}
if (kk)
{
ec[l]=ecc[z];
l++;
z++;
}
}
ec[l]='\n';
z=0;
while (n)
{
n--;
sww[sw[z]-'A']=(sww[sw[z]-'A']+1)&1;
fprintf(fout, "%d", Paranteza(0));
z++;
}
return 0;
}