-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path024_histogram.sio
More file actions
91 lines (82 loc) · 2.31 KB
/
024_histogram.sio
File metadata and controls
91 lines (82 loc) · 2.31 KB
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//@ run-pass
// HumanEval 024: Histogram
//
// Build a frequency histogram from an integer array.
// Values must be in range [0, 255]. Output is a frequency count array
// where hist[v] = number of occurrences of value v.
struct Histogram { counts: [i64; 256] }
fn build_histogram(arr: [i64; 256], n: i64) -> Histogram with Mut, Panic {
var hist = Histogram { counts: [0; 256] }
var i: i64 = 0
while i < n {
let val = arr[i]
hist.counts[val] = hist.counts[val] + 1
i = i + 1
}
hist
}
fn main() -> i64 with IO, Mut, Panic, Div {
// Test 1: [1, 2, 2, 3, 3, 3] -> counts[1]=1, counts[2]=2, counts[3]=3
var a1: [i64; 256] = [0; 256]
a1[0] = 1
a1[1] = 2
a1[2] = 2
a1[3] = 3
a1[4] = 3
a1[5] = 3
let h1 = build_histogram(a1, 6)
assert(h1.counts[0] == 0)
assert(h1.counts[1] == 1)
assert(h1.counts[2] == 2)
assert(h1.counts[3] == 3)
assert(h1.counts[4] == 0)
// Test 2: all same value [5,5,5,5] -> counts[5]=4
var a2: [i64; 256] = [0; 256]
a2[0] = 5
a2[1] = 5
a2[2] = 5
a2[3] = 5
let h2 = build_histogram(a2, 4)
assert(h2.counts[5] == 4)
assert(h2.counts[0] == 0)
assert(h2.counts[4] == 0)
// Test 3: empty array -> all zeros
var a3: [i64; 256] = [0; 256]
let h3 = build_histogram(a3, 0)
assert(h3.counts[0] == 0)
assert(h3.counts[1] == 0)
assert(h3.counts[255] == 0)
// Test 4: single element [42] -> counts[42]=1
var a4: [i64; 256] = [0; 256]
a4[0] = 42
let h4 = build_histogram(a4, 1)
assert(h4.counts[42] == 1)
assert(h4.counts[0] == 0)
// Test 5: [0,0,0,1,1,2,255] -> counts[0]=3, counts[1]=2, counts[2]=1, counts[255]=1
var a5: [i64; 256] = [0; 256]
a5[0] = 0
a5[1] = 0
a5[2] = 0
a5[3] = 1
a5[4] = 1
a5[5] = 2
a5[6] = 255
let h5 = build_histogram(a5, 7)
assert(h5.counts[0] == 3)
assert(h5.counts[1] == 2)
assert(h5.counts[2] == 1)
assert(h5.counts[255] == 1)
assert(h5.counts[3] == 0)
// Test 6: [10, 20, 10, 20, 10] -> counts[10]=3, counts[20]=2
var a6: [i64; 256] = [0; 256]
a6[0] = 10
a6[1] = 20
a6[2] = 10
a6[3] = 20
a6[4] = 10
let h6 = build_histogram(a6, 5)
assert(h6.counts[10] == 3)
assert(h6.counts[20] == 2)
println("024_histogram: ALL TESTS PASSED")
0
}