Cod sursa(job #245318)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 17 ianuarie 2009 18:38:22
Problema Bool Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 2.34 kb
#include <stdio.h>
#include <string.h>


#define Sigma 26
#define max 1100

char s[max],*p,ch;
int a[Sigma];
int nr,lung,N,i;


int eval();
int termen();
int factor();


int eval()
{
    int aux=termen();
    while (*p=='O' && *(p+1)=='R')
           {
             p+=2;
             aux=aux|termen();
           }
    
    return aux;
           
}

int termen()
{
    int aux=factor();
    while (*p=='A' && *(p+1)=='N' && *(p+2)=='D')
           {
                p+=3;
                aux=aux&factor();
           }
           
    return aux;
    
}

int factor()         
{
    int aux,poz;
    poz=1;
    
    if (*p=='N' && *(p+1)=='O' && *(p+2)=='T')
        {
             p+=3;
             poz=0;
             aux=factor();
        }
        else
    if (*p=='(')
         {
             p+=1;   
             aux=eval();
             p+=1;
         }
        else
    if (*p=='F' && *(p+1)=='A' && *(p+2)=='L' && *(p+3)=='S' && *(p+4)=='E')
        {
            aux=0;
            p+=5;
        }
        else
    if (*p=='T' && *(p+1)=='R' && *(p+2)=='U' && *(p+3)=='E')
        {
            aux=1;
            p+=4;
        }
        else
        {
            aux=a[*p-97];
            p++;
        }
    
    if (poz==1)
         return aux;
        else 
    if (aux==0)
        return 1;
        else
    if (aux==1)
        return 0;
}                                        
    
    
    
    
int main()
{
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    //scanf("%s\n", &s);
    gets(s);
    lung=strlen(s);
    for (i=lung;i>=1;--i)
          s[i]=s[i-1];
    //lung=strlen(s);
    //for (i=1;i<=lung;++i)
    //printf("%c", s[i]);
    s[0]=' ';
    //printf("%s", s);
    nr=0;
    for (i=1;i<=lung;++i)
          {
             if (s[i]!=' ')
             //nr++;
             s[nr++]=s[i];
             //nr++;
          }
          
    nr++;      
    for (i=nr;i<=lung;++i)
             s[i]=0;         
    memset(a,0,sizeof(a));
    scanf("%d\n", &N);
    for (i=1;i<=N;++i)
         {
            scanf("%c",&ch);
            if (a[ch-97]==1)
                a[ch-97]=0;
                else
                a[ch-97]=1;
            p=s;
            printf("%d",eval());
         }
    return 0;
}