Cod sursa(job #1679761)

Utilizator GreeDGlavan George Florian GreeD Data 8 aprilie 2016 10:56:52
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

bool vExpresii[30];
char expresie[1001];
char* p=expresie;

bool f0();
bool f1();
bool f2();

bool f0(){
    bool b=f1();
    while(*p=='O'&&*(p+1)=='R'){

        p+=2;


        b=b || f1();

    }
    return b;
}

bool f1(){
    bool b=f2();
    while(*p=='A'&&*(p+1)=='N'&&*(p+2)=='D'){

        p=p+3;

        b=b && f2();

    }
    return b;
}

bool f2(){
    bool b=false;
    if(*p=='('){
        p++;
        b=f0();
        p++;
       }else{
         if(*p=='T' && *(p+1)=='R' && *(p+2)=='U' && *(p+3)=='E'){

            b=true;
            p+=4;
        }else if(*p=='F' && *(p+1)=='A' && *(p+1)=='L' && *(p+2)=='S' && *(p+3)=='E'){

            b=false;
            p+=5;

        }else if(*p=='N' && *(p+1)=='O' && *(p+2)=='T'){

            p+=3;
            b=!f0();
        }else if(*p>='A' && *p<='Z'){
            b=vExpresii[*p-65];

            p+=1;

        }
       }

    return b;
}

int main()
{
    char valori[100];
    int N;
    FILE* f=fopen("bool.in","r");
    FILE* g=fopen("bool.out","w");
    fgets(expresie,1001,f);
    fscanf(f,"%d%s",&N,&valori);
    for(int i=0;i<strlen(expresie);i++){
        if(expresie[i]==' '){
            strcpy(expresie+i,expresie+i+1);
        }
    }
    for(int i=0;i<30;i++){
        vExpresii[i]=false;
    }
    for(int i=0;i<N;i++){
        vExpresii[valori[i]-65]=!vExpresii[valori[i]-65];
        p=expresie;
        fprintf(g,"%d",f0());
    }
    return 0;
}