-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathStack.go
More file actions
94 lines (77 loc) · 1.37 KB
/
Stack.go
File metadata and controls
94 lines (77 loc) · 1.37 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
92
93
94
package goreco
import "log"
type Stack interface {
Push(int)
Size() uint
SizeCur() uint
Mean() uint
Sum() int
Avg() float64
AvgNoZero() int
Max() int
}
type stack struct {
size uint
rr []int
}
//NewResultDamper
/*
* size - stack size
*/
func NewStack(size uint) Stack {
if size == 0 {
log.Panicln("size must be greater then 0")
}
return &stack{size: size}
}
//Push - push value in the stack
func (s *stack) Push(r int) {
if uint(len(s.rr)) >= s.size {
s.rr = s.rr[1:]
}
s.rr = append(s.rr, r)
}
//Size - return declared size of the stack
func (s *stack) Size() uint {
return s.size
}
//SizeCur - return CURRENT size of the stack
func (s *stack) SizeCur() uint {
return uint(len(s.rr))
}
//Mean - amount of non-zero values
func (s *stack) Mean() uint {
var mean uint = 0
for i := 0; i < len(s.rr); i++ {
if s.rr[i] > 0 {
mean += 1
}
}
return mean
}
//Sum - sum of values in the stack
func (s *stack) Sum() int {
sum := 0
for i := 0; i < len(s.rr); i++ {
sum += s.rr[i]
}
return sum
}
//Avg - average mean of the stack
func (s *stack) Avg() float64 {
panic("implement me")
}
//AvgNoZero - average mean of non-zero values in the stack
func (s *stack) AvgNoZero() int {
panic("implement me")
}
//Max - max value of the stack
func (s *stack) Max() int {
var max int
for i, e := range s.rr {
if i == 0 || e > max {
max = e
}
}
return max
}