JSFiddle - React, Tailwind, and code Playground

by webchemist

HTML

<table id="truth">
    <tr>
        <th>A</th>
        <th>B</th>
        <th>C</th>
        <th>D</th>
        <th width="50px"></th>
        <th>Std Gates</th>
        <th width="50px"></th>
        <th>NAND Only</th>
    </tr>
</table>

JavaScript

$(document).ready(function(){
    truthTable();
});

function nandOnly(a,b,c,d){
    var aa = nandGate(a,a);
    var bb = nandGate(b,b);
    var cc = nandGate(c,c);
    var dd = nandGate(d,d);    
    var ab = nandGate(aa, bb);   // 5 gates
    
    if(nandGate(                 // 6
         nandGate(a, cc)         // 7
        ,nandGate(               // 8
             nandGate(ab,ab)     // 9         
            ,nandGate(cc, dd)    // 10
        )
    )){
        return 1
    }
    return 0;
}



function stdGates(a,b,c,d){
    if(orGate(
         andGate(a, notGate(c))
        ,andGate(
             andGate(
                 notGate(a)
                ,notGate(b)
            )
            ,orGate(c,d)
        )
    )){
        return 1;
    }
    return 0;
}



function notGate(a){      return !a;             }
function orGate(a, b){    return (a || b);       }   
function andGate(a, b){   return (a && b);       }
function nandGate(a, b){  return !(a && b);      }
function norGate(a,b){    return !(a || b);      }

function truthTable(){
    for(i = 0; i<2; i++){
        for(j = 0; j<2; j++){
            for(k = 0; k< 2; k++){
                 for(l = 0; l< 2; l++){
                    var  row  = '<tr><td>'+i+'</td>';
                         row += '<td>'+j+'</td>';
                         row += '<td>'+k+'</td>';
                         row += '<td>'+l+'</td>';
                         row += '<td></td>';
                         row += '<td style="color:green;">' + stdGates(i,j,k,l) + '</td>';
                         row += '<td></td>';    
                         row += '<td style="color:red;">' + nandOnly(i,j,k,l) + '</td></tr>';
                     $('#truth').append(row);
                }
            }
        }   
    } 
}