aboutsummaryrefslogtreecommitdiff
path: root/rankings/filter.go
diff options
context:
space:
mode:
Diffstat (limited to 'rankings/filter.go')
-rw-r--r--rankings/filter.go37
1 files changed, 31 insertions, 6 deletions
diff --git a/rankings/filter.go b/rankings/filter.go
index 1d7233b..2af7911 100644
--- a/rankings/filter.go
+++ b/rankings/filter.go
@@ -2,11 +2,12 @@ package main
2 2
3import ( 3import (
4 "log" 4 "log"
5 "math"
5 "sort" 6 "sort"
6) 7)
7 8
8func filterRankings(spRankings, mpRankings, overallRankings *[]*Player, players *map[string]*Player) { 9func filterRankings(spRankings, mpRankings, overallRankings *[]*Player, players map[string]*Player) {
9 for k, p := range *players { 10 for k, p := range players {
10 if p.SpIterations == 51 { 11 if p.SpIterations == 51 {
11 *spRankings = append(*spRankings, p) 12 *spRankings = append(*spRankings, p)
12 } 13 }
@@ -18,13 +19,14 @@ func filterRankings(spRankings, mpRankings, overallRankings *[]*Player, players
18 *overallRankings = append(*overallRankings, p) 19 *overallRankings = append(*overallRankings, p)
19 } 20 }
20 if p.SpIterations < 51 && p.MpIterations < 48 { 21 if p.SpIterations < 51 && p.MpIterations < 48 {
21 delete(*players, k) 22 delete(players, k)
22 } 23 }
23 } 24 }
24 25
25 log.Println("getting player summaries") 26 log.Println("getting player summaries for", len(players), "players")
26 for _, v := range *players { 27
27 fetchPlayerInfo(v) 28 for _, chunk := range chunkMap(players, 100) {
29 fetchPlayerInfo(chunk)
28 } 30 }
29 31
30 log.Println("sorting the ranks") 32 log.Println("sorting the ranks")
@@ -91,3 +93,26 @@ func filterRankings(spRankings, mpRankings, overallRankings *[]*Player, players
91 (*overallRankings)[idx].OverallRank = rank 93 (*overallRankings)[idx].OverallRank = rank
92 } 94 }
93} 95}
96
97func chunkMap[T any](m map[string]*T, chunkSize int) [][]*T {
98 chunks := make([][]*T, 0, int(math.Ceil(float64(len(m))/float64(chunkSize))))
99 chunk := make([]*T, 0, chunkSize)
100
101 count := 0
102 for _, player := range m {
103 chunk = append(chunk, player)
104 count++
105
106 if count == chunkSize {
107 chunks = append(chunks, chunk)
108 chunk = make([]*T, 0, chunkSize)
109 count = 0
110 }
111 }
112
113 if len(chunk) > 0 {
114 chunks = append(chunks, chunk)
115 }
116
117 return chunks
118}