diff options
Diffstat (limited to 'rankings/filter.go')
| -rw-r--r-- | rankings/filter.go | 37 |
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 | ||
| 3 | import ( | 3 | import ( |
| 4 | "log" | 4 | "log" |
| 5 | "math" | ||
| 5 | "sort" | 6 | "sort" |
| 6 | ) | 7 | ) |
| 7 | 8 | ||
| 8 | func filterRankings(spRankings, mpRankings, overallRankings *[]*Player, players *map[string]*Player) { | 9 | func 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 | |||
| 97 | func 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 | } | ||