-
Notifications
You must be signed in to change notification settings - Fork 143
/
Copy path1.v
65 lines (53 loc) · 1.13 KB
/
1.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import strconv
import os
struct Node {
left &Node
right &Node
}
fn check(node &Node) int {
mut ret := 1
unsafe {
if node.left != 0 {
ret += check(node.left)
}
if node.right != 0 {
ret += check(node.right)
}
}
return ret
}
fn create(n int) &Node {
if n == 0 {
return &Node{
left: unsafe { nil }
right: unsafe { nil }
}
}
return &Node{
left: create(n - 1)
right: create(n - 1)
}
}
const min_depth = 4
fn main() {
mut max_depth := 10
if os.args.len > 1 {
max_depth = strconv.atoi(os.args[1]) or { 10 }
}
stretch_depth := max_depth + 1
stretch_tree := create(stretch_depth)
println('stretch tree of depth ${stretch_depth}\t check: ${check(stretch_tree)}')
long_lived_tree := create(max_depth)
n_results := (max_depth - min_depth) / 2 + 1
for i in 0 .. n_results {
depth := i * 2 + min_depth
n := 1 << (max_depth - depth + min_depth)
mut check_result := 0
for _ in 0 .. n {
node := create(depth)
check_result += check(node)
}
println('${n}\t trees of depth ${depth}\t check: ${check_result}')
}
println('long lived tree of depth ${max_depth}\t check: ${check(long_lived_tree)}')
}