jain12

boolean parenthesization

Jun 6th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.06 KB | None | 0 0
  1.  #include<iostream>
  2.  using namespace std;
  3.  
  4.  /* wrong code written by me
  5.  int countParenth(char sym[],char op[],int n){
  6.    int total[n][n],F[n][n];
  7.    for(int i=0;i<n;i++)
  8.      total[i][i]=sym[i]=='T'?1:0;
  9.     for(int i=0;i<n;i++)
  10.      F[i][i]=sym[i]=='F'?1:0;
  11.    for(int gap=1;gap<n;gap++){
  12.      for(int i=0,j=gap;j<n;i++,j++){
  13.        int valT=0,valF=0;
  14.        for(int k=i;k<j;k++){
  15.            int first=total[i][k],sec=total[k+1][j];
  16.            int res=0;
  17.            if(op[k]=='|')
  18.              res=first||sec;
  19.             if(op[k]=='&')
  20.              res=first&&sec;
  21.             if(op[k]=='^')
  22.              res=first^sec;
  23.             if(res){
  24.               int a=first==0?1:first;
  25.               int b=sec==0?1:sec;
  26.               valT+=a*b;
  27.               }
  28.             else{
  29.               int a=first==0?1:first;
  30.               int b=sec==0?1:sec;
  31.               valF+=a*b;
  32.               }
  33.            }
  34.          total[i][j]=total[j][i]=valT;
  35.          F[i][j]=F[j][i]=valF;
  36.        }
  37.      }
  38.    return total[0][n-1];
  39.    }
  40.   */
  41.  
  42.   int countParenth(char sym[],char ope[],int n){  //TT |
  43.     int T[n][n],F[n][n];
  44.     for(int i=0;i<n;i++){
  45.        T[i][i]=sym[i]=='T'?1:0;
  46.        F[i][i]=sym[i]=='F'?1:0;
  47.       }
  48.     for(int gap=1;gap<n;gap++){
  49.       for(int i=0,j=gap;j<n;i++,j++){
  50.         T[i][j]=0,F[i][j]=0;
  51.         for(int k=i;k<j;k++){
  52.           int tik=T[i][k]+F[i][k];
  53.           int tkj=T[k+1][j]+F[k+1][j];
  54.           if(ope[k]=='|'){
  55.             F[i][j]+=F[i][k]*F[k+1][j];
  56.             T[i][j]+=tik*tkj-F[i][k]*F[k+1][j];
  57.             }
  58.           if(ope[k]=='&'){
  59.             T[i][j]+=T[i][k]*T[k+1][j];
  60.             F[i][j]+=tik*tkj-T[i][k]*T[k+1][j];
  61.             }
  62.           if(ope[k]=='^'){
  63.             T[i][j]+=F[i][k]*T[k+1][j]+T[i][k]*F[k+1][j];
  64.             F[i][j]+=F[i][k]*F[k+1][j]+T[i][k]*T[k+1][j];
  65.             }
  66.           }
  67.         }
  68.       }
  69.       return T[0][n-1];
  70.     }
  71.  
  72.  int main(){
  73.     char symbols[] = "TTFT";
  74.     char operators[] = "|&^";
  75.     int n = 4;
  76.     cout << countParenth(symbols,operators,n);
  77.     return 0;
  78.     }
Add Comment
Please, Sign In to add comment