Content-Length: 802968 | pFad | http://github.com/algorithm-visualizer/tracers.js/commit/5d2afadcd370a1bfc8d667d3f27e434274bf3223

0E Add cpp randomizer · algorithm-visualizer/tracers.js@5d2afad · GitHub
Skip to content

Commit 5d2afad

Browse files
committed
Add cpp randomizer
1 parent 32c1152 commit 5d2afad

File tree

8 files changed

+252
-8
lines changed

8 files changed

+252
-8
lines changed

builders/cpp.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ project(tracers)
5555
5656
set(CMAKE_CXX_STANDARD 11)
5757
58-
add_library(tracers Tracer.cpp Tracer.h ${tracers.map(tracer => `${tracer.name}.cpp ${tracer.name}.h`).join(' ')})
58+
add_library(tracers Randomize.h Tracer.cpp Tracer.h ${tracers.map(tracer => `${tracer.name}.cpp ${tracer.name}.h`).join(' ')})
5959
6060
set_target_properties(tracers
6161
PROPERTIES

languages/cpp/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@ cmake_minimum_required(VERSION 3.2)
33
include_directories(include)
44

55
add_subdirectory(src)
6+
7+
add_subdirectory(test)

languages/cpp/src/.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/CMakeLists.txt
22
/*.cpp
33
/*.h
4-
!/Tracer.*
4+
!/Tracer.*
5+
!/Randomize.*

languages/cpp/src/Randomize.h

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
#ifndef PROJECT_RANDOMIZE_H
2+
#define PROJECT_RANDOMIZE_H
3+
4+
#include <random>
5+
#include <algorithm>
6+
7+
namespace Randomize {
8+
using std::string;
9+
using std::mt19937;
10+
11+
template<class T>
12+
class Randomizer {
13+
public:
14+
Randomizer() {
15+
}
16+
17+
virtual T create() {
18+
}
19+
};
20+
21+
22+
class Integer : public Randomizer<int> {
23+
private:
24+
int _min;
25+
int _max;
26+
27+
mt19937 rng;
28+
29+
public:
30+
Integer(int min = 1, int max = 9) {
31+
_min = min;
32+
_max = max;
33+
34+
rng.seed(std::random_device()());
35+
}
36+
37+
int create() {
38+
std::uniform_int_distribution<int> dist6(_min, _max);
39+
return dist6(rng);
40+
}
41+
};
42+
43+
44+
class Double : public Randomizer<double> {
45+
private:
46+
double _min;
47+
double _max;
48+
49+
mt19937 rng;
50+
51+
public:
52+
Double(double min = 0, double max = 1) {
53+
_min = min;
54+
_max = max;
55+
56+
rng.seed(std::random_device()());
57+
}
58+
59+
double create() {
60+
std::uniform_real_distribution<double> dist6(_min, _max);
61+
return dist6(rng);
62+
}
63+
};
64+
65+
66+
class String : public Randomizer<string> {
67+
private:
68+
int _length;
69+
string _letters;
70+
71+
public:
72+
String(int length = 16, string letters = "abcdefghijklmnopqrstuvwxyz") {
73+
_length = length;
74+
_letters = letters;
75+
}
76+
77+
string create() {
78+
string text = "";
79+
Integer randomizer(0, _letters.length() - 1);
80+
for (int i = 0; i < _length; i++) {
81+
text += _letters[randomizer.create()];
82+
}
83+
return text;
84+
}
85+
};
86+
87+
88+
template<class T>
89+
class Array2D : public Randomizer<T **> {
90+
private:
91+
int _N;
92+
int _M;
93+
Randomizer<T> *_randomizer;
94+
bool _sorted;
95+
96+
public:
97+
Array2D(int N = 10, int M = 10, Randomizer<T> &randomizer = *(new Integer())) {
98+
_N = N;
99+
_M = M;
100+
_randomizer = &randomizer;
101+
_sorted = false;
102+
}
103+
104+
Array2D sorted(bool sorted = true) {
105+
_sorted = sorted;
106+
return *this;
107+
}
108+
109+
T **create() {
110+
T **D = new T *[_N];
111+
for (int i = 0; i < _N; i++) {
112+
D[i] = new T[_M];
113+
for (int j = 0; j < _M; j++) {
114+
D[i][j] = (*_randomizer).create();
115+
}
116+
if (_sorted) std::sort(D[i], D[i] + _M);
117+
}
118+
return D;
119+
}
120+
};
121+
122+
123+
template<class T>
124+
class Array1D : public Randomizer<T *> {
125+
private:
126+
int _N;
127+
Randomizer<T> *_randomizer;
128+
bool _sorted;
129+
130+
public:
131+
Array1D(int N = 10, Randomizer<T> &randomizer = *(new Integer())) {
132+
_N = N;
133+
_randomizer = &randomizer;
134+
_sorted = false;
135+
}
136+
137+
Array1D sorted(bool sorted = true) {
138+
_sorted = sorted;
139+
return *this;
140+
}
141+
142+
T *create() {
143+
T *D = new T[_N];
144+
for (int i = 0; i < _N; i++) {
145+
D[i] = (*_randomizer).create();
146+
}
147+
if (_sorted) std::sort(D, D + _N);
148+
return D;
149+
}
150+
};
151+
152+
153+
template<class T>
154+
class Graph : public Randomizer<T **> {
155+
private:
156+
int _N;
157+
double _ratio;
158+
Randomizer<T> *_randomizer;
159+
bool _directed;
160+
bool _weighted;
161+
162+
public:
163+
Graph(int N = 5, double ratio = .3, Randomizer<T> &randomizer = *(new Integer())) {
164+
_N = N;
165+
_ratio = ratio;
166+
_randomizer = &randomizer;
167+
_directed = true;
168+
_weighted = false;
169+
}
170+
171+
Graph directed(bool directed = true) {
172+
_directed = directed;
173+
return *this;
174+
}
175+
176+
Graph weighted(bool weighted = true) {
177+
_weighted = weighted;
178+
return *this;
179+
}
180+
181+
T **create() {
182+
T **G = new T *[_N];
183+
for (int i = 0; i < _N; i++) {
184+
G[i] = new T[_N];
185+
}
186+
Double ratioRandomizer;
187+
for (int i = 0; i < _N; i++) {
188+
G[i][i] = 0;
189+
T value = ratioRandomizer.create() < _ratio ? _weighted ? (*_randomizer).create() : 1 : 0;
190+
if (_directed) {
191+
for (int j = 0; j < _N; j++) {
192+
if (i == j) continue;
193+
G[i][j] = value;
194+
}
195+
} else {
196+
for (int j = 0; j < i; j++) {
197+
G[i][j] = G[j][i] = value;
198+
}
199+
}
200+
}
201+
return G;
202+
}
203+
};
204+
}
205+
206+
#endif //PROJECT_RANDOMIZE_H

languages/cpp/src/Tracer.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,9 @@ void Tracer::onExit() {
3535
cout << traces.dump(2);
3636
}
3737

38-
int registered = atexit(Tracer::onExit);
39-
//TODO: add randomizer
38+
int init() {
39+
atexit(Tracer::onExit);
40+
return 0;
41+
}
42+
43+
int _ = init();

languages/cpp/src/Tracer.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22
#define CPP_TRACER_H
33

44
#include <string>
5-
#include "../include/json.hpp"
6-
7-
using namespace std;
8-
using json = nlohmann::json;
5+
#include "json.hpp"
96

107
class Tracer {
8+
protected:
9+
using string = std::string;
10+
using json = nlohmann::json;
11+
1112
private:
1213
static int tracerCount;
1314
static json traces;

languages/cpp/test/CMakeLists.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
cmake_minimum_required(VERSION 3.2)
2+
project(tracers_test)
3+
4+
set(CMAKE_CXX_STANDARD 11)
5+
6+
include_directories(../src)
7+
8+
add_executable(tracers_test main.cpp)
9+
10+
target_link_libraries(tracers_test tracers)

languages/cpp/test/main.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#include <string>
2+
#include <iostream>
3+
#include "LogTracer.h"
4+
#include "Randomize.h"
5+
6+
using namespace std;
7+
using namespace Randomize;
8+
9+
int main() {
10+
int N = 5;
11+
int **graph = Graph<int>(N, 1, *(new Integer(1, 5))).weighted(true).create();
12+
for (int i = 0; i < N; i++) {
13+
for (int j = 0; j < N; j++) {
14+
cout << graph[i][j] << " ";
15+
}
16+
cout << endl;
17+
}
18+
// int **arr = randomizer->create();
19+
return 0;
20+
}

0 commit comments

Comments
 (0)








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://github.com/algorithm-visualizer/tracers.js/commit/5d2afadcd370a1bfc8d667d3f27e434274bf3223

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy