1
0
forked from Mirror/wren
Files
wren/benchmark/binary_trees.js
2013-11-29 20:25:00 -08:00

55 lines
1.4 KiB
JavaScript

/* The Great Computer Language Shootout
http://shootout.alioth.debian.org/
contributed by Isaac Gouy */
function TreeNode(left, right, item) {
this.left = left;
this.right = right;
this.item = item;
}
TreeNode.prototype.itemCheck = function() {
if (this.left == null) return this.item;
return this.item + this.left.itemCheck() - this.right.itemCheck();
}
function bottomUpTree(item, depth) {
if (depth > 0) {
return new TreeNode(
bottomUpTree(2 * item - 1, depth - 1),
bottomUpTree(2 * item, depth - 1), item);
}
return new TreeNode(null, null, item);
}
var minDepth = 4;
var maxDepth = 14;
var stretchDepth = maxDepth + 1;
var start = process.hrtime();
var check = bottomUpTree(0, stretchDepth).itemCheck();
console.log("stretch tree of depth " + stretchDepth + "\t check: " + check);
var longLivedTree = bottomUpTree(0, maxDepth);
for (var depth = minDepth; depth <= maxDepth; depth += 2) {
var iterations = 1 << (maxDepth - depth + minDepth);
check = 0;
for (var i = 1; i <= iterations; i++) {
check += bottomUpTree(i, depth).itemCheck();
check += bottomUpTree(-i, depth).itemCheck();
}
console.log(iterations * 2 + "\t trees of depth " + depth +
"\t check: " + check);
}
console.log("long lived tree of depth " + maxDepth + "\t check: "
+ longLivedTree.itemCheck());
var elapsed = process.hrtime(start);
elapsed = elapsed[0] + elapsed[1] / 1000000000;
console.log("elapsed: " + elapsed);