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);
}
}
}
}
}