Skip to content

Instantly share code, notes, and snippets.

@mraleph
Last active November 26, 2016 19:52
Show Gist options
  • Save mraleph/e8bc9e4e37d9467bcf16b218d4db548d to your computer and use it in GitHub Desktop.
Save mraleph/e8bc9e4e37d9467bcf16b218d4db548d to your computer and use it in GitHub Desktop.
--- /Users/vegorov/Desktop/main.dart.txt 2016-11-26 20:51:13.000000000 +0100
+++ bin/bench.dart 2016-11-26 20:51:31.000000000 +0100
@@ -11,36 +11,40 @@
final exerciseDepth = 5;
final resultDepth = 6;
-createNode(id, depth) {
- return {
- 'id': id,
- 'depth': depth,
- 'result': {
- 'score': 0.0,
- 'progress': 0.0,
- },
- 'children': [],
- };
+class Result {
+ var score;
+ var progress;
+ Result([this.score = 0.0, this.progress = 0.0]);
+}
+
+class Node {
+ var id;
+ var depth;
+ var result = new Result();
+ var children = [];
+
+ Node(this.id, this.depth);
}
+createNode(id, depth) => new Node(id, depth);
+
searchNodeIndex(id, List nodes) {
for (var i = 0; i < nodes.length; i++) {
- if (nodes[i]['id'] == id) {
+ if (nodes[i].id == id) {
return i;
}
}
return -1;
}
-extractResult(row) {
- final score = num.parse(row['score']);
- final progress = num.parse(row['progress']);
- return {'score': score, 'progress': progress};
+extractResult(result, row) {
+ result.score = num.parse(row['score']);
+ result.progress = num.parse(row['progress']);
}
-getOrCreateNode(Map<String, List> root, id, depth) {
- final children = root['children'];
- final search = children.firstWhere((n) => n['id'] == id, orElse: () => -1);
+getOrCreateNode(Node root, id, depth) {
+ final children = root.children;
+ final search = children.firstWhere((n) => n.id == id, orElse: () => -1);
if (search == -1) {
return createNode(id, depth);
}
@@ -78,17 +82,17 @@
createResultNode(row) {
final result = createNode(resultId, resultDepth);
- result['result'] = extractResult(row);
+ extractResult(result.result, row);
return result;
}
-appendOrOverwriteChildren(Map<String, List> parent, child) {
- final i = searchNodeIndex(child['id'], parent['children']);
+appendOrOverwriteChildren(Node parent, child) {
+ final i = searchNodeIndex(child.id, parent.children);
if (i == -1) {
- parent['children'].add(child);
+ parent.children.add(child);
} else {
- parent['children'][i] = child;
+ parent.children[i] = child;
}
return parent;
}
@@ -102,7 +106,7 @@
final pckg = nodes[3];
final exercise = nodes[4];
- exercise['children'].add(result);
+ exercise.children.add(result);
appendOrOverwriteChildren(pckg, exercise);
appendOrOverwriteChildren(subcategory, pckg);
@@ -118,33 +122,33 @@
}
calculateNodeResult(node) {
- final children = node['children'];
+ final children = node.children;
if (children.length == 0) {
- return node['result'];
+ return node.result;
}
var scores = [];
var progresses = [];
for (final child in children) {
final result = calculateNodeResult(child);
- scores.add(result['score']);
- progresses.add(result['progress']);
+ scores.add(result.score);
+ progresses.add(result.progress);
}
var score;
var progress;
- if (node['depth'] == exerciseDepth) {
+ if (node.depth == exerciseDepth) {
// ignore: strong_mode_could_not_infer
- score = scores.reduce((p, c) => Math.max(p, c));
+ score = scores.reduce(Math.max);
// ignore: strong_mode_could_not_infer
- progress = progresses.reduce((p, c) => Math.max(p, c));
+ progress = progresses.reduce(Math.max);
} else {
score = avg(scores);
progress = avg(progresses);
}
- return {'score': score, 'progress': progress};
+ return new Result(score, progress);
}
avg(values) {
@@ -155,25 +159,25 @@
return result / values.length;
}
-generateUserData(user, tree, headers) sync* {
+generateUserData(user, Node tree, headers) sync* {
yield JSON.encode(user);
final userId = int.parse(user['user_id']);
- final userTree = tree['children'].firstWhere((node) => node['id'] == userId);
+ final userTree = tree.children.firstWhere((node) => node.id == userId);
final userResult = calculateNodeResult(userTree);
yield JSON.encode({
- 'score': userResult['score'].toString(),
- 'progress': userResult['progress'].toString()
+ 'score': userResult.score.toString(),
+ 'progress': userResult.progress.toString()
});
yield* headers.map((header) {
final headerID = int.parse(header['id']);
final headerTree =
- userTree['children'].firstWhere((node) => node['id'] == headerID);
+ userTree.children.firstWhere((node) => node.id == headerID);
final headerResult = calculateNodeResult(headerTree);
final headerResultString = {
- 'score': headerResult['score'].toString(),
- 'progress': headerResult['progress'].toString()
+ 'score': headerResult.score.toString(),
+ 'progress': headerResult.progress.toString()
};
return JSON.encode(headerResultString);
});
@@ -185,11 +189,11 @@
final headers = params['headers'];
final content = params['contentData'];
final tree = createContentTree(classId, content);
- return users.map((user) => generateUserData(user, tree, headers));
+ return users.map((user) => generateUserData(user, tree, headers).toList()).toList();
}
readParamsFromAssets() {
- final json = JSON.decode(new File('./asset/params.json').readAsStringSync());
+ final json = JSON.decode(new File('params.json').readAsStringSync());
return json;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment