Include overall rank

This commit is contained in:
2023-12-04 09:25:21 -06:00
parent 6eadef654f
commit 53393830ba

30
main.go
View File

@ -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 {