Include overall rank
This commit is contained in:
30
main.go
30
main.go
@ -11,6 +11,7 @@ import (
|
||||
"net/url"
|
||||
"os"
|
||||
"os/signal"
|
||||
"sort"
|
||||
"strconv"
|
||||
"syscall"
|
||||
"time"
|
||||
@ -191,8 +192,9 @@ func main() {
|
||||
completionTime := time.Unix(part.GotStarAt, 0).In(ChicagoTimeZone).Format("3:04:05pm")
|
||||
rank := getCompletionRank(&leaderboard, &member, dayIdx, partNum) + 1
|
||||
ordinal := getOrdinal(rank)
|
||||
overallRank := getLeaderboardRank(&lastLeaderboard, &member) + 1
|
||||
err := sendNotification(fmt.Sprintf(
|
||||
":tada: %s completed day %d part %d %d%s on [the leaderboard](https://adventofcode.com/%s/leaderboard/private/view/%s) at %s, and now has %d star%s on the year. :tada:",
|
||||
":tada: %s completed day %d part %d %d%s on [the leaderboard](https://adventofcode.com/%s/leaderboard/private/view/%s) at %s, and now has %d star%s on the year, good for %d%s place overall. :tada:",
|
||||
member.Name,
|
||||
dayIdx+1,
|
||||
partNum,
|
||||
@ -203,6 +205,8 @@ func main() {
|
||||
completionTime,
|
||||
totalStars,
|
||||
totalStarsPlural,
|
||||
overallRank,
|
||||
getOrdinal(overallRank),
|
||||
))
|
||||
|
||||
if err != nil {
|
||||
@ -278,6 +282,30 @@ func getCompletionRank(leaderboard *leaderboardData, inMember *memberData, dayId
|
||||
return numAhead
|
||||
}
|
||||
|
||||
func getLeaderboardRank(leaderboard *leaderboardData, inMember *memberData) int {
|
||||
ranking := make([]memberData, 0, len(leaderboard.Members))
|
||||
ranking = append(ranking, leaderboard.Members...)
|
||||
|
||||
sort.Slice(ranking, func(i, j int) bool {
|
||||
if ranking[i].LocalScore > ranking[j].LocalScore {
|
||||
return true
|
||||
}
|
||||
if ranking[i].LocalScore < ranking[j].LocalScore {
|
||||
return false
|
||||
}
|
||||
|
||||
return ranking[i].ID < ranking[j].ID
|
||||
})
|
||||
|
||||
for i := range ranking {
|
||||
if ranking[i].ID == inMember.ID {
|
||||
return i
|
||||
}
|
||||
}
|
||||
|
||||
return -1
|
||||
}
|
||||
|
||||
func getOrdinal(n int) string {
|
||||
v := n % 100
|
||||
if v >= 20 && len(ordinals) > (v-20)%10 {
|
||||
|
Reference in New Issue
Block a user