mirror of
https://github.com/wren-lang/wren.git
synced 2026-01-11 06:08:41 +01:00
61 lines
1.2 KiB
Dart
61 lines
1.2 KiB
Dart
// Ported from the Wren version.
|
|
|
|
class Tree {
|
|
var _item;
|
|
var _left;
|
|
var _right;
|
|
|
|
Tree(item, depth) {
|
|
_item = item;
|
|
if (depth > 0) {
|
|
var item2 = item + item;
|
|
depth--;
|
|
_left = new Tree(item2 - 1, depth);
|
|
_right = new Tree(item2, depth);
|
|
}
|
|
}
|
|
|
|
get check {
|
|
if (_left == null) {
|
|
return _item;
|
|
}
|
|
|
|
return _item + _left.check - _right.check;
|
|
}
|
|
}
|
|
|
|
main() {
|
|
var minDepth = 4;
|
|
var maxDepth = 12;
|
|
var stretchDepth = maxDepth + 1;
|
|
|
|
Stopwatch watch = new Stopwatch();
|
|
watch.start();
|
|
|
|
print("stretch tree of depth ${stretchDepth} check: "
|
|
"${new Tree(0, stretchDepth).check}");
|
|
|
|
var longLivedTree = new Tree(0, maxDepth);
|
|
|
|
// iterations = 2 ** maxDepth
|
|
var iterations = 1;
|
|
for (var d = 0; d < maxDepth; d++) {
|
|
iterations = iterations * 2;
|
|
}
|
|
|
|
var depth = minDepth;
|
|
while (depth < stretchDepth) {
|
|
var check = 0;
|
|
for (var i = 1; i <= iterations; i++) {
|
|
check += new Tree(i, depth).check + new Tree(-i, depth).check;
|
|
}
|
|
|
|
print("${iterations * 2} trees of depth ${depth} check: ${check}");
|
|
iterations ~/= 4;
|
|
depth += 2;
|
|
}
|
|
|
|
print("long lived tree of depth ${maxDepth} check: ${longLivedTree.check}");
|
|
print("elapsed: ${watch.elapsedMilliseconds / 1000}");
|
|
}
|