Cod sursa(job #2816439)

Utilizator Linca_AmaliaLinca Mihaela Amalia Linca_Amalia Data 11 decembrie 2021 13:22:54
Problema Bool Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <fstream>
#include <cstring>
using namespace std;

ifstream fin("bool.in");
ofstream fout("bool.out");

const int DIM = 1005;

bool val[DIM];
int n, i;
char s[DIM], a[DIM], s1[DIM];

bool lowpriority();
bool midpriority();
bool highpriority();

bool lowpriority(){
    bool r = midpriority();
    while ( s[i] == 'O' && s[i+1] == 'R' ){
            i += 2; /// OR x
            r |= midpriority();
    }
    return r;
}

bool midpriority(){
    bool r = highpriority();
    while ( s[i] == 'A' && s[i+1] == 'N' && s[i+2] == 'D' ){
        i += 3;  ///AND x
        r &= highpriority();
    }
    return r;
}

bool highpriority(){
    bool r;
    if ( s[i] == '(' ){
        i++; /// (x
        r = lowpriority(); /// x
        i++; /// x ...
    } else {
        if ( s[i] == 'N' && s[i+1] == 'O' && s[i+2] == 'T' ){
            i += 3;  ///NOT
            r = !lowpriority();
        } else {
            if ( s[i] == 'F' && s[i+1] == 'A' && s[i+2] == 'L' && s[i+3] == 'S' && s[i+4] == 'E' ){
                i += 5; /// FALSE
                r = false;
            } else {
                if ( s[i] == 'T' && s[i+1] == 'R' && s[i+2] == 'U' && s[i+3] == 'E' ){
                    i += 4; /// TRUE
                    r = true;
                } else {
                    r = val[ s[i] ];
                    i++;
                }
            }
        }
    }
    return r;

}


int main(){
    fin.getline(s, DIM);
    int m = strlen(s);
    int k = 0;
    for (int j = 0; j < m; j++)
        if (s[j] != ' ')
            s1[k++] = s[j];
    strcpy(s, s1);
    fin >> n;
    fin >> a;
    for (int j = 0; j < n; j++) {
        val[ a[j] ] = !val[ a[j] ];
        i = 0;
        fout << lowpriority();
    }
    return 0;
}

/// lowpriority = .. or ..
/// midpriority = .. and..
/// highpriority = NOT, ( ), FALSE, TRUE, variabila