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,...