// The Computer Language Benchmarks Game
// http://benchmarksgame.alioth.debian.org/
include "string", "math";
function BottomUpTree( item, depth )
{
if( depth > 0 )
{
i = item + item;
depth = depth - 1;
left = BottomUpTree(i-1, depth);
right = BottomUpTree(i, depth);
return [item, left, right];
}
else
{
return [item];
}
}
function ItemCheck(tree)
{
if( @tree[1] )
return tree[0] + ItemCheck(tree[1]) - ItemCheck(tree[2]);
else
return tree[0];
}
var N = toreal(@argv[1]) ?? 0.0;
var mindepth = 4;
var maxdepth = mindepth + 2;
if( maxdepth < N ) maxdepth = N;
{
var stretchdepth = maxdepth + 1;
var stretchtree = BottomUpTree(0, stretchdepth);
print(string_format("stretch tree of depth {1:d}\t check: {2:d}\n",
stretchdepth, ItemCheck(stretchtree)));
}
var longlivedtree = BottomUpTree(0, maxdepth);
for( depth=mindepth; depth <= maxdepth; depth += 2 )
{
var iterations = pow( 2, maxdepth - depth + mindepth);
var check = 0;
for( i=1; i <= iterations; ++i)
{
check = check + ItemCheck(BottomUpTree(1, depth)) +
ItemCheck(BottomUpTree(-1, depth));
}
print(string_format("{1:d}\t trees of depth {2:d}\t check: {3:d}\n",
iterations*2, depth, check));
}
print(string_format("long lived tree of depth {1:d}\t check: {2:d}\n",
maxdepth, ItemCheck(longlivedtree)));
Comments