Include overall rank
This commit is contained in:
30
main.go
30
main.go
@ -11,6 +11,7 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
@ -191,8 +192,9 @@ func main() {
|
|||||||
completionTime := time.Unix(part.GotStarAt, 0).In(ChicagoTimeZone).Format("3:04:05pm")
|
completionTime := time.Unix(part.GotStarAt, 0).In(ChicagoTimeZone).Format("3:04:05pm")
|
||||||
rank := getCompletionRank(&leaderboard, &member, dayIdx, partNum) + 1
|
rank := getCompletionRank(&leaderboard, &member, dayIdx, partNum) + 1
|
||||||
ordinal := getOrdinal(rank)
|
ordinal := getOrdinal(rank)
|
||||||
|
overallRank := getLeaderboardRank(&lastLeaderboard, &member) + 1
|
||||||
err := sendNotification(fmt.Sprintf(
|
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,
|
member.Name,
|
||||||
dayIdx+1,
|
dayIdx+1,
|
||||||
partNum,
|
partNum,
|
||||||
@ -203,6 +205,8 @@ func main() {
|
|||||||
completionTime,
|
completionTime,
|
||||||
totalStars,
|
totalStars,
|
||||||
totalStarsPlural,
|
totalStarsPlural,
|
||||||
|
overallRank,
|
||||||
|
getOrdinal(overallRank),
|
||||||
))
|
))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -278,6 +282,30 @@ func getCompletionRank(leaderboard *leaderboardData, inMember *memberData, dayId
|
|||||||
return numAhead
|
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 {
|
func getOrdinal(n int) string {
|
||||||
v := n % 100
|
v := n % 100
|
||||||
if v >= 20 && len(ordinals) > (v-20)%10 {
|
if v >= 20 && len(ordinals) > (v-20)%10 {
|
||||||
|
Reference in New Issue
Block a user