JSFiddle - React, Tailwind, and code Playground

by Jeff Santos

HTML

<div id="output" />

JavaScript

function Node(id, value) {
  this.id = id;
  this.content = value;
  this.edges = [];

  this.addEdge = function(xNode, cost) {
    this.edges.push({
      "node": xNode,
      "cost": cost
    });
  }

  this.toString = function() {
    return this.content + " (" + this.edges.map(function(item) {
      return item.node.content
    }).sort().join(", ") + ")";
  }

}

function Graph() {
  this.idCount = 0;
  this.nodes = {};

  this.add = function(value) {
    var nNode = new Node(this.idCount, value);
    this.nodes[nNode.id] = nNode;
    this.idCount++;
    return nNode;
  }

  this.join = function(n1, n2, cost) {
    n1.addEdge(n2, cost);
    n2.addEdge(n1, cost);
  }

  this.toString = function() {
    var ar = [];
    for (var key in this.nodes) {
      ar.push(this.nodes[key].toString());
    }
    return ar.sort(cSort).sort(sort).join("\n");
  }
}

function sort(a, b) {
  var atom = ["O", "H", "N", "C"];
  var av = atom.indexOf(a[0]);
  var bv = atom.indexOf(b[0]);
  return (av < bv) ? -1 : (av > bv) ? 1 : 0;
}


function cSort(a, b) {
  if (a.length != b.length) {
    return a.length - b.length;
  }
  return (a < b) ? -1 : (a > b) ? 1 : 0;
}

var g = new Graph();
var h1 = g.add("H");
var h2 = g.add("H");
var h3 = g.add("H");
var h4 = g.add("H");
var h5 = g.add("H");
var h6 = g.add("H");
var h7 = g.add("H");
var h8 = g.add("H");
var h9 = g.add("H");


var c1 = g.add("C");
var c2 = g.add("C");
var c3 = g.add("C");
var c4 = g.add("C");
var c5 = g.add("C");
var c6 = g.add("C");
var c7 = g.add("C");
var c8 = g.add("C");

var n1 = g.add("N");
var n2 = g.add("N");
var n3 = g.add("N");
var n4 = g.add("N");

var o1 = g.add("O");
var o2 = g.add("O");

g.join(c1, h1, 1);
g.join(c1, h2, 1);
g.join(c1, h3, 1);
g.join(c1, n1, 1);

g.join(c2, n1, 1);
g.join(c2, n2, 1);
g.join(c2, o1, 2);

g.join(c3, h4, 1);
g.join(c3, h5, 1);
g.join(c3, h6, 1);
g.join(c3, n2, 1);

g.join(c4, n2, 1);
g.join(c4, n3, 1);
g.join(c4, c7, 2);

g.join(c5, n3, 2);
g.join(c5, h7, 1);
g.join(c5,...