snake5 icon

binarytrees.sgs

snake5 | PRO | 09/08/16 06:34:46 AM UTC | 0 ⭐ | 790 👁️ | Never ⏰ | []
C++ |

1.39 KB

|

None

|

0 👍

/

0 👎

// 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