Cod sursa(job #1496769)

Utilizator livliviLivia Magureanu livlivi Data 5 octombrie 2015 16:17:20
Problema Bool Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 kb
#include<cstdio>
#define LEN 1000
#define N 100
using namespace std;

char S[LEN+1];
char modificari[N+1];
bool val[27];
int p;


bool expresie();

bool fact(){
    bool R;

    if (S[p]=='('){
        p++;
        R=expresie();
    }
    else
    if (S[p]=='1' ||S[p]=='0') R=S[p]-'0';
    else R=val[S[p]-'A'];

    p++;
    return R;
}

bool factor(){
    bool R,sign=0;

    if (S[p]=='!'){
        p++;
        sign=1;
    }

    R=fact();
    return R^sign;
}

bool termen(){
    bool F=factor();
    bool R;

    R=F;
    while(S[p]=='&'){
        p++;
        F=factor();
        R=(R&&F);
    }

    return R;
}

bool expresie(){
    bool T=termen();
    bool R;

    R=T;
    while(S[p]=='|'){
        p++;
        T=termen();
        R=(R||T);
    }

    return R;
}


void trans(){
    int i,j;
    i=0;
    j=0;

    while(S[i]!='\n' &&S[i]!='\0'){
        if (S[i]==' ') i++;
        else
        if (S[i]=='A' &&S[i+1]=='N' &&S[i+2]=='D'){
            S[j]='&';
            j++;
            i+=3;
        }
        else
        if (S[i]=='O' &&S[i+1]=='R'){
            S[j]='|';
            j++;
            i+=2;
        }
        else
        if (S[i]=='N' &&S[i+1]=='O' &&S[i+2]=='T'){
            S[j]='!';
            j++;
            i+=3;
        }
        else
        if (S[i]=='T' &&S[i+1]=='R'){
            S[j]='1';
            j++;
            i+=4;
        }
        else
        if (S[i]=='F' &&S[i+1]=='A'){
            S[j]='0';
            j++;
            i+=5;
        }
        else {
            S[j]=S[i];
            j++;
            i++;
        }
    }

    S[j]='\0';
}


int main(){
    freopen ("bool.in","r",stdin);
    freopen ("bool.out","w",stdout);
    int n,i;

    gets(S);
    scanf ("%d\n",&n);
    gets(modificari);

    trans();
    for(i=0;i<n;i++){
        val[modificari[i]-'A']=(val[modificari[i]-'A']^1);
        p=0;
        modificari[i]=expresie()+'0';
    }

    puts(modificari);
    return 0;
}