From 8819169144f15a2e452228f49d822b5fb8635455 Mon Sep 17 00:00:00 2001 From: Jason Park Date: Sat, 28 Apr 2018 17:19:05 -0500 Subject: [PATCH] Add randomize module --- src/frontend/core/Randomize.js | 47 ++++++++++++++++++++++++++ src/frontend/core/datas/Array2DData.js | 2 +- src/frontend/core/datas/GraphData.js | 4 +-- src/frontend/core/index.js | 1 + src/frontend/core/tracerManager.jsx | 3 +- src/frontend/core/tracers/Tracer.js | 4 +++ 6 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 src/frontend/core/Randomize.js diff --git a/src/frontend/core/Randomize.js b/src/frontend/core/Randomize.js new file mode 100644 index 0000000..e6b35bb --- /dev/null +++ b/src/frontend/core/Randomize.js @@ -0,0 +1,47 @@ +const integer = (min = 1, max = 9) => { + return (Math.random() * (max - min + 1) | 0) + min; +}; + +const array1D = (N, options) => { + return array2D(1, N, options)[0]; +}; + +const array2D = (N = 10, M = 10, options = {}) => { + const { sorted = false, min, max } = options; + const D = []; + for (let i = 0; i < N; i++) { + D.push([]); + for (let j = 0; j < M; j++) { + D[i].push(integer(min, max)); + } + if (sorted) D[i].sort((a, b) => a - b); + } + return D; +}; + +const graph = (N = 5, options = {}) => { + const { directed = true, weighted = false, ratio = .3, min, max } = options; + const G = new Array(N); + for (let i = 0; i < N; i++) G[i] = new Array(N); + for (let i = 0; i < N; i++) { + G[i][i] = 0; + if (directed) { + for (let j = 0; j < N; j++) { + if (i === j) continue; + G[i][j] = Math.random() < ratio ? weighted ? integer(min, max) : 1 : 0; + } + } else { + for (let j = 0; j < i; j++) { + G[i][j] = G[j][i] = Math.random() < ratio ? weighted ? integer(min, max) : 1 : 0; + } + } + } + return G; +}; + +export default { + integer, + array1D, + array2D, + graph, +}; \ No newline at end of file diff --git a/src/frontend/core/datas/Array2DData.js b/src/frontend/core/datas/Array2DData.js index d9eddb6..a2feeeb 100644 --- a/src/frontend/core/datas/Array2DData.js +++ b/src/frontend/core/datas/Array2DData.js @@ -18,7 +18,7 @@ class Array2DData extends Data { super.set(); } - notify(x, y, v) { + notify(x, y, v = this.data[x][y].value) { this.data[x][y].value = v; this.data[x][y].notified = true; this.render(); diff --git a/src/frontend/core/datas/GraphData.js b/src/frontend/core/datas/GraphData.js index d77dab6..435e78d 100644 --- a/src/frontend/core/datas/GraphData.js +++ b/src/frontend/core/datas/GraphData.js @@ -108,12 +108,12 @@ class Graph { } addNode(id, weight, visited, x = 0, y = 0) { - if (this.findNode(id)) throw new Error(`Node '${id}' is already added.`); + if (this.findNode(id)) return; this.nodes.push({ id, weight, visited, x, y }); } addEdge(source, target, weight, visited) { - if (this.findEdge(source, target)) throw new Error(`Edge from '${source}' to '${target}' is already added.`); + if (this.findEdge(source, target)) return; this.edges.push({ source, target, weight, visited }); } diff --git a/src/frontend/core/index.js b/src/frontend/core/index.js index 4197bf0..7f90fed 100644 --- a/src/frontend/core/index.js +++ b/src/frontend/core/index.js @@ -1,2 +1,3 @@ +export { default as Randomize } from './Randomize'; export { default as Seed } from './Seed'; export { default as tracerManager } from './tracerManager'; \ No newline at end of file diff --git a/src/frontend/core/tracerManager.jsx b/src/frontend/core/tracerManager.jsx index 1208a6c..7d7e7e2 100644 --- a/src/frontend/core/tracerManager.jsx +++ b/src/frontend/core/tracerManager.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Seed } from '/core'; +import { Randomize, Seed } from '/core'; import * as Tracers from '/core/tracers'; import { Tracer } from '/core/tracers'; import * as Datas from '/core/datas'; @@ -8,6 +8,7 @@ import { Array1DRenderer, Array2DRenderer, ChartRenderer, GraphRenderer, LogRend Object.assign(window, Tracers); Object.assign(window, Datas); +Object.assign(window, { Randomize }); class TracerManager { constructor() { diff --git a/src/frontend/core/tracers/Tracer.js b/src/frontend/core/tracers/Tracer.js index 846e2e9..5374a9f 100644 --- a/src/frontend/core/tracers/Tracer.js +++ b/src/frontend/core/tracers/Tracer.js @@ -1,5 +1,9 @@ class Tracer { constructor(title = this.constructor.name, options = {}) { + if (typeof title === 'object') { + options = title; + title = this.constructor.name; + } this.key = Tracer.seed.addTracer(this.constructor.name, title, options); this.register( 'reset', -- GitLab