Last active
November 26, 2016 19:52
-
-
Save mraleph/e8bc9e4e37d9467bcf16b218d4db548d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- /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