| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // The Computer Language Benchmarks Game
- // http://benchmarksgame.alioth.debian.org/
- // contributed by Mike Pall
- array_t BottomUpTree(int_t item, int_t depth){
- //array_t ary = [];//array(3);
- //ary.clear();
- //ary.push_back(item);
- if (depth > 0){
- int_t i = item + item;
- --depth;
- //ary.push_back(BottomUpTree(i-1, depth));
- //ary.push_back(BottomUpTree(i, depth));
- return [ item, BottomUpTree(i-1, depth), BottomUpTree(i, depth) ];
- }
- //return ary;
- return [ item ];
- }
- int_t ItemCheck(array_t tree){
- //if (tree.get(1, false)) return tree[0] + ItemCheck(tree[1]) - ItemCheck(tree[2])
- if (tree.len() > 1) return tree[0] + ItemCheck(tree[1]) - ItemCheck(tree[2])
- return tree[0]
- }
- int_t main()
- {
- double_t start = os.clock()
- //check_delayed_release_hooks(false);
- int_t N = vargv.get(1, 14).tointeger();
- int_t mindepth = 4
- int_t maxdepth = mindepth + 2
- if (maxdepth < N) maxdepth = N
- {
- int_t stretchdepth = maxdepth + 1
- array_t stretchtree = BottomUpTree(0, stretchdepth)
- printf("stretch tree of depth %d\t check: %d\n",
- stretchdepth, ItemCheck(stretchtree));
- }
- array_t longlivedtree = BottomUpTree(0, maxdepth)
- for(int_t depth=mindepth; depth <= maxdepth; depth += 2){
- int_t iterations = math.pow(2, (maxdepth - depth + mindepth)).tointeger()
- int_t check = 0
- for(int_t i=0; i < iterations; ++i){
- check += (ItemCheck(BottomUpTree(1, depth))) +
- (ItemCheck(BottomUpTree(-1, depth)));
- }
- printf("%d\t trees of depth %d\t check: %d\n",
- iterations*2, depth, check);
- }
- printf("long lived tree of depth %d\t check: %d\n",
- maxdepth, ItemCheck(longlivedtree));
- printf("binary-tree \t%d \t%f\n", N, os.clock()-start);
- return 0;
- }
- main();
|