Cod sursa(job #2624348)

Utilizator FilipCuciucFilip Cuciuc FilipCuciuc Data 4 iunie 2020 18:52:30
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
//
//  main.cpp
//  C++ - teste
//
//  Created by Filip Cuciuc on 03/02/2020.
//  Copyright © 2020 Filip Cuciuc. All rights reserved.
//

//#include <iostream>
#include <stdio.h>
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <math.h>
#include <map>
#include <string>
#include <cctype>
//#include "MED.h"
using namespace std;
//using namespace std::chrono;

ifstream cin("bool.in");
ofstream cout("bool.out");

int i, n;
string s, fis;
bool v[260];

bool AND();
bool OR();
bool NOT();
bool op();

bool OR() {
    bool rez = AND();
    while (s.substr(i, 4) == " OR ") {
        i += 4;
        rez |= AND();
    }
    return rez;
}

bool AND() {
    bool rez = NOT();
    while (s.substr(i, 5) == " AND ") {
        i += 5;
        rez &= NOT();
    }
    return rez;
}

bool NOT() {
    bool rez;
    if (s.substr(i, 4) == "NOT ") {
        i += 4;
        rez = !NOT();
    }
    else
        rez = op();
    return rez;
}

bool op() {
    bool rez;
    if (s[i] == '(') {
        i++;
        rez = OR();
        i++;
    }
    else if (s.substr(i, 4) == "TRUE") {
        rez = 1;
        i += 4;
    }
    else if (s.substr(i, 5) == "FALSE") {
        rez = 0;
        i += 5;
    }
    else {
        rez = v[s[i]];
        i++;
    }
    return rez;
}

int main() {

    getline(cin, s);
    cin >> n;
    while (n--) {
        char c;
        cin >> c;
        v[c] = !v[c];
        i = 0;
        cout << OR();
    }
    return 0;
}