-
Notifications
You must be signed in to change notification settings - Fork 3
/
skills.go
63 lines (57 loc) · 1.49 KB
/
skills.go
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
package model
// Skills we assess.
//
// TODO(flowlo, victorbalan): Add further categories
// of assessment.
type Skills struct {
Readability,
Security,
CodingSpeed,
Algorithmics float64 `json:",omitempty"`
}
// SkillWeights can be used to express what impact or
// rating a Task has on a set of Skills.
type SkillWeights Skills
func (s Skills) Add(skills Skills) Skills {
return Skills{
Readability: skills.Readability + s.Readability,
Security: skills.Security + s.Security,
Algorithmics: skills.Algorithmics + s.Algorithmics,
CodingSpeed: skills.CodingSpeed + s.CodingSpeed,
}
}
func (s Skills) Mul(skills Skills) Skills {
return Skills{
Readability: skills.Readability * s.Readability,
Security: skills.Security * s.Security,
Algorithmics: skills.Algorithmics * s.Algorithmics,
CodingSpeed: skills.CodingSpeed * s.CodingSpeed,
}
}
func (s Skills) Div(skills Skills) Skills {
computed := Skills{}
if s.Readability > 0 {
computed.Readability = s.Readability / skills.Readability
}
if s.Security > 0 {
computed.Security = s.Security / skills.Security
}
if s.Algorithmics > 0 {
computed.Algorithmics = s.Algorithmics / skills.Algorithmics
}
if s.CodingSpeed > 0 {
computed.CodingSpeed = s.CodingSpeed / skills.CodingSpeed
}
return computed
}
func (s Skills) DivBy(v float64) Skills {
if v == 0 {
v = 1
}
return Skills{
Readability: s.Readability / v,
Security: s.Security / v,
Algorithmics: s.Algorithmics / v,
CodingSpeed: s.CodingSpeed / v,
}
}