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 newNode = new Node(this.idCount, value);
this.nodes[newNode.id] = newNode;
this.idCount++;
return newNode;
}
this.join = function(n1, n2, cost) {
n1.addEdge(n2, cost);
n2.addEdge(n1, cost);
}
this.toString = function() {
var strAry = [];
for (var key in this.nodes) {
strAry.push(this.nodes[key].toString());
}
return strAry.sort(cSort).sort(sort).join("\n");
}
}
function sort(x, y) {
var atom = ["O", "H", "N", "C"];
var xn = atom.indexOf(x[0]);
var yn = atom.indexOf(y[0]);
return (xn < yn) ? -1 : (xn > yn) ? 1 : 0;
}
// Sort function came from http://mozgovipc.blogspot.com/2010/11/jquery-javascript-how-to-sort-string.html
// this makes everything nice and tidey
function cSort(x, y) {
if (x.length != y.length) {
return x.length - y.length;
}
return (x < y) ? -1 : (x > y) ? 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 h10 = 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,...