HjHimansh

Untitled

Sep 18th, 2018
84
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2.  
  3. var test = {
  4.   'op': 'equal',
  5.  
  6.     'lhs': {
  7.         'op': 'add',
  8.         'lhs': 1,
  9.         'rhs': {
  10.             'op': 'multiply',
  11.             'lhs': 'x',
  12.             'rhs': 10
  13.         }
  14.     },
  15.    
  16.     'rhs': 21                  
  17. };
  18.  
  19.  
  20. function strToOp(str){
  21.   switch(str){
  22.     case 'add':
  23.       return '+';
  24.     case 'multiply':
  25.       return '*';
  26.     case 'divide':
  27.       return '/';
  28.     case 'subtract':
  29.       return '-';
  30.     case 'equal':
  31.       return '=';
  32.   }
  33. }
  34.  
  35. var my_string = "";
  36.  
  37. function makeString(myObj){
  38.     if(typeof myObj === 'object'){
  39.         my_string+= '(';
  40.         makeString(myObj['lhs']);
  41.         my_string+= strToOp(myObj.op);
  42.         if(typeof myObj['rhs'] === 'object'){
  43.             makeString(myObj['rhs']);
  44.             my_string+= ')';
  45.         }else{
  46.             makeString(myObj['rhs']);
  47.             my_string+= ')';
  48.         }  
  49.     }else{
  50.         my_string+= myObj;
  51.     }
  52. }
  53.  
  54. function opposite_op(str){
  55.     switch(str){
  56.     case 'add':
  57.       return 'subtract';
  58.     case 'multiply':
  59.       return 'divide';
  60.     case 'divide':
  61.       return 'multiply';
  62.     case 'subtract':
  63.       return 'add';
  64.     case 'rhs':
  65.         return 'lhs';
  66.     case 'lhs':
  67.         return 'rhs';
  68.   }
  69. }
  70.  
  71.  
  72. function srch(obj){
  73.     //search for x in obj; if Found return true else false
  74.    
  75.     if(typeof obj === 'object'){
  76.         return srch(obj['lhs']) || srch(obj['rhs']);
  77.        
  78.     }
  79.    
  80.     if(obj==='x'){
  81.         return true;
  82.     }else{
  83.         return false;
  84.     }
  85. }
  86.  
  87. function has_x(obj){
  88.     //obj['lhs'] is passed in this function;
  89.     //will return 'lhs' or 'rhs'
  90.    
  91.     if(srch(obj['lhs'])){
  92.         return 'lhs';
  93.     }else{
  94.         return 'rhs';
  95.     }
  96. }
  97.  
  98. function transfer_lhs_rhs(obj){
  99.     obj['rhs'] = {'lhs': obj['rhs']};
  100.     obj['rhs']['op'] = opposite_op(obj['lhs']['op']);
  101.     obj['rhs']['rhs'] = obj['lhs'][opposite_op(has_x(obj['lhs']))];
  102.    
  103.    
  104.     obj['lhs'] = obj['lhs'][has_x(obj['lhs'])];
  105.    
  106.     if(obj['lhs'] !== 'x'){
  107.         transfer_lhs_rhs(obj);
  108.     }
  109. }
  110.  
  111. makeString(test);
  112. var result1 = my_string.slice(1, -1);
  113. console.log(result1);
  114.  
  115. my_string = "";
  116. transfer_lhs_rhs(test);
  117. makeString(test);
  118. var result2 = my_string.slice(1, -1);
  119. console.log(result2);
  120.  
  121. var to_eval = result2.substring(result2.indexOf('=')+1, result2.length);
  122. //console.log(to_eval);
  123.  
  124. console.log("x = " + eval(to_eval));
RAW Paste Data Copied