-
Notifications
You must be signed in to change notification settings - Fork 1
/
suggested_players.go
73 lines (62 loc) · 1.95 KB
/
suggested_players.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
64
65
66
67
68
69
70
71
72
73
package gobgg
const (
spcPollName = "suggested_numplayers"
)
// SuggestedPlayerCount is a structure that shows the suggested player count based on user voting
type SuggestedPlayerCount struct {
NumPlayers string
Best int
Recommended int
NotRecommended int
}
func percent(i1, i2, i3 int) float32 {
sum := float32(i1 + i2 + i3)
if sum <= 0 {
return 0
}
return (float32(i1) / sum) * 100
}
func (sp *SuggestedPlayerCount) Suggestion() (string, int, float32) {
// In case of a tie, the not recommended wins, the recommended, then best
if sp.Recommended >= sp.Best && sp.Recommended > sp.NotRecommended {
return "Recommended", sp.Recommended, percent(sp.Recommended, sp.Best, sp.NotRecommended)
}
if sp.Best > sp.Recommended && sp.Best > sp.NotRecommended {
return "Best", sp.Best, percent(sp.Best, sp.Recommended, sp.NotRecommended)
}
return "Not Recommended", sp.NotRecommended, percent(sp.NotRecommended, sp.Best, sp.Recommended)
}
func (sp *SuggestedPlayerCount) BestPercentile() float32 {
return percent(sp.Best, sp.Recommended, sp.NotRecommended)
}
func (sp *SuggestedPlayerCount) RecommendedPercentile() float32 {
return percent(sp.Recommended, sp.Best, sp.NotRecommended)
}
func (sp *SuggestedPlayerCount) NotRecommendedPercentile() float32 {
return percent(sp.NotRecommended, sp.Best, sp.Recommended)
}
func getSuggestedPoll(ps []PollStruct) ([]SuggestedPlayerCount, error) {
var result []SuggestedPlayerCount
for pi := range ps {
if ps[pi].Name != spcPollName {
continue
}
for it := range ps[pi].Results {
item := SuggestedPlayerCount{
NumPlayers: ps[pi].Results[it].Numplayers,
}
for _, single := range ps[pi].Results[it].Result {
switch single.Value {
case "Best":
item.Best = single.Numvotes
case "Not Recommended":
item.NotRecommended = single.Numvotes
case "Recommended":
item.Recommended = single.Numvotes
}
}
result = append(result, item)
}
}
return result, nil
}