JSFiddle - React, Tailwind, and code Playground

by shtrih

HTML

<div id="log">
</div>

CSS

pre {
  margin: 0;
  padding: 0.5em;
  background-color: #fff6;
}
pre:nth-child(odd) {
  background-color: #eee6;
}

JavaScript

var table_of_truth = (form1, form2, token_count) => {
	let cycles = Math.pow(2, token_count),
    result = '',
    alphabet = 'abcdefghijklmnopqrstuvwxyz',
    header = '<pre>',
    is_header_filled = false,
    normalize_form = (form, vars) => {
    	let result = form;
      
      for(let char in vars) {
      	result = result.replace(new RegExp(char, 'g'), 'vars["' + char + '"]');
      }
      
      return result
    }
	;
  
	for (let i = 0; i < cycles; i++) {
  	const vars = {};
    
  	result += '<pre>';	
    
  	for (let char, pow, k = 0, j = token_count; j > 0; j--) {
    	char = alphabet.charAt(k++);
      
      if (!is_header_filled) {
      	header += char + ' ';
      }
    
      pow = Math.pow(2, j);
      vars[char] = (i % pow > (pow / 2 - 1));
      
      result += ~~vars[char];
      result += ' ';
    }
    
    result += '     ';
    result += ~~eval(normalize_form(form1, vars));
    result += '      ' + ' '.repeat(form1.length);
    result += ~~eval(normalize_form(form2, vars));
    
    is_header_filled = true;
    
    result += '</pre>';
	}
  header += '     (' + form1 + ')     (' + form2 + ')';
	header += '</pre>';
  
  document.getElementById("log").innerHTML = header + result;
}

table_of_truth('!a & (b || !c) || a & !c', '!a & b || !c', 3);