Cod sursa(job #2791911)

Utilizator teodortatomirTeodor Tatomir teodortatomir Data 31 octombrie 2021 13:10:16
Problema Bool Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000

int rasp[26],n,i;
char v[MAX];
int par();
int or();

int and(){
  char af=par();

  while(v[i+2]=='D' && v[i+1]=='N' && v[i]=='A'){
    i+=4;
    af=af&par();
  }
  return af;
}
int or(){
  char af=and();

  while(v[i]=='O' && v[i+1]=='R'){
    i+=3;
    af=af|and();
  }
  return af;
}
int par(){
  char af;

  if(v[i]=='('){
    i++;
    af=or();
    i++;
  }
  else if(v[i]=='F' && v[i+1]=='A' && v[i+2]=='L' && v[i+3]=='S' && v[i+4]=='E'){
    i+=6;
    af=0;
  }
  else if(v[i]=='T' && v[i+1]=='R' && v[i+2]=='U' && v[i+3]=='E'){
    i+=5;
    af=1;
  }
  else if(v[i]=='N' && v[i+1]=='O' && v[i+2]=='T'){
    i+=4;
    af=!par();
  }
  else{
    af=rasp[v[i]-'A'];
    i+=2;
  }
  return af;
}
int main(){
  FILE *fin,*fout;
  int n,x;
  char ch;

  fin=fopen("bool.in", "r");
  fout=fopen("bool.out", "w");
  ch=fgetc(fin);
  x=0;
  while(ch!='\n'){
    v[x]=ch;
    x++;
    ch=fgetc(fin);
  }
  fscanf(fin, "%d", &n);
  ch=fgetc(fin);
  for(x=0;x<n;x++){
    ch=fgetc(fin);
    i=0;
    rasp[ch-'A']=!rasp[ch-'A'];
    fprintf(fout, "%d", or());
  }
  fclose(fin);

  fprintf(fout, "\n");
  fclose(fout);
  return 0;
}