Published
Edited
May 31, 2021
Insert cell
Insert cell
md`${circus({h: width, loops: true})(trans2fsm(rndGraph()({numNodes: 20, numEdges: 20})))}`
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
rndGraph = mt => props => {
const numNodes = props.numNodes || 2;
const randomNodeIndex = () => (Math.random() * numNodes) |0;
const nodes = [];
for (let i = 0; i < numNodes; i++) {
nodes.push({
srco: {},
dsto: {}
});
}
const numEdges = props.numEdges || 4;
let state = 0;
let curNumEdges = 0;
while (curNumEdges < numEdges) {
const next = randomNodeIndex();
if (nodes[state].srco[next] === undefined) {
curNumEdges += 1;
nodes[state].srco[next] = 0;
nodes[next].dsto[state] = 0;
}
nodes[state].srco[next] += 1;
nodes[next].dsto[state] += 1;
state = next;
}
return nodes;
}
Insert cell
trans2fsm = nodes => {
const fsm = {};
const name = i => 'S' + Number(i).toString(36);
let cond = 0;
nodes.map((n, ni) => {
const edgo = {};
fsm[name(ni)] = edgo;
Object.keys(n.srco).map(edge => {
edgo[name(edge)] = cond;
cond++;
});
});
return fsm;
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more