1
{ The Great Computer Language Shootout
2
http://shootout.alioth.debian.org
4
contributed by Ales Katona
18
function CreateNode(l2, r2: PNode; const i2: Longint): PNode;
20
Result := GetMem(SizeOf(TNode));
26
procedure DestroyNode(ANode: PNode);
28
if ANode^.l <> nil then begin
29
DestroyNode(ANode^.l);
30
DestroyNode(ANode^.r);
32
FreeMem(ANode, SizeOf(TNode));
35
function CheckNode(ANode: PNode): Longint;
37
if ANode^.l = nil then
40
Result:=CheckNode(ANode^.l) + ANode^.i - CheckNode(ANode^.r);
43
function Make(i, d: Longint): PNode;
45
if d = 0 then Result:=CreateNode(nil, nil, i)
46
else Result:=CreateNode(Make(2 * i - 1, d - 1), Make(2 * i, d - 1), i);
60
if ParamCount = 1 then
61
Val(ParamStr(1), maxd);
68
Writeln('stretch tree of depth ', strd, #9' check: ', CheckNode(tree));
74
while d <= maxd do begin
75
iter:=1 shl (maxd - d + mind);
77
for i:=1 to Iter do begin
79
c:=c + CheckNode(tree);
82
c:=c + CheckNode(tree);
85
Writeln(2 * Iter, #9' trees of depth ', d, #9' check: ', c);
89
Writeln('long lived tree of depth ', maxd, #9' check: ', CheckNode(llt));