@@ -20,6 +20,7 @@ for (let i = 0; i < allChallenges.length; i++) {
20
20
challengeTiebreakEligibles . set ( challenge . id , challenge . tiebreakEligible )
21
21
}
22
22
const userSolves = new Map ( )
23
+ const userTiebreakEligibleLastSolves = new Map ( )
23
24
const userLastSolves = new Map ( )
24
25
let lastIndex = 0
25
26
@@ -42,8 +43,9 @@ const calculateScores = (sample) => {
42
43
}
43
44
solveAmount . set ( challId , amt + 1 )
44
45
46
+ userLastSolves . set ( userId , createdAt )
45
47
if ( challengeTiebreakEligibles . get ( challId ) !== false ) { // !== false because we default to true
46
- userLastSolves . set ( userId , createdAt )
48
+ userTiebreakEligibleLastSolves . set ( userId , createdAt )
47
49
}
48
50
// Store which challenges each user solved for later
49
51
if ( ! userSolves . has ( userId ) ) {
@@ -74,6 +76,7 @@ const calculateScores = (sample) => {
74
76
for ( let i = 0 ; i < users . length ; i ++ ) {
75
77
const user = users [ i ]
76
78
let currScore = 0
79
+ const lastTiebreakEligibleSolve = userTiebreakEligibleLastSolves . get ( user . id )
77
80
const lastSolve = userLastSolves . get ( user . id )
78
81
if ( lastSolve === undefined ) continue // If the user has not solved any challenges, do not add to leaderboard
79
82
const solvedChalls = userSolves . get ( user . id )
@@ -84,7 +87,14 @@ const calculateScores = (sample) => {
84
87
currScore += value
85
88
}
86
89
}
87
- userScores . push ( [ user . id , user . name , user . division , currScore , lastSolve ] )
90
+ userScores . push ( [
91
+ user . id ,
92
+ user . name ,
93
+ user . division ,
94
+ currScore ,
95
+ lastTiebreakEligibleSolve ,
96
+ lastSolve
97
+ ] )
88
98
}
89
99
90
100
return {
@@ -95,12 +105,16 @@ const calculateScores = (sample) => {
95
105
96
106
const userCompare = ( a , b ) => {
97
107
// sort the users by score
98
- // if two user's scores are the same, sort by last solve time
108
+ // if two user's scores are the same, sort by last tiebreakEligible solve time
109
+ // if neither user has any tiebreakEligible solves, sort by last solve time
99
110
const scoreCompare = b [ 3 ] - a [ 3 ]
100
111
if ( scoreCompare !== 0 ) {
101
112
return scoreCompare
102
113
}
103
- return a [ 4 ] - b [ 4 ]
114
+ if ( a [ 4 ] !== undefined || b [ 4 ] !== undefined ) {
115
+ return ( a [ 4 ] ?? Infinity ) - ( b [ 4 ] ?? Infinity )
116
+ }
117
+ return a [ 5 ] - b [ 5 ]
104
118
}
105
119
106
120
const leaderboardUpdate = Math . min ( Date . now ( ) , config . endTime )
0 commit comments