@@ -20,6 +20,7 @@ for (let i = 0; i < allChallenges.length; i++) {
2020 challengeTiebreakEligibles . set ( challenge . id , challenge . tiebreakEligible )
2121}
2222const userSolves = new Map ( )
23+ const userTiebreakEligibleLastSolves = new Map ( )
2324const userLastSolves = new Map ( )
2425let lastIndex = 0
2526
@@ -42,8 +43,9 @@ const calculateScores = (sample) => {
4243 }
4344 solveAmount . set ( challId , amt + 1 )
4445
46+ userLastSolves . set ( userId , createdAt )
4547 if ( challengeTiebreakEligibles . get ( challId ) !== false ) { // !== false because we default to true
46- userLastSolves . set ( userId , createdAt )
48+ userTiebreakEligibleLastSolves . set ( userId , createdAt )
4749 }
4850 // Store which challenges each user solved for later
4951 if ( ! userSolves . has ( userId ) ) {
@@ -74,6 +76,7 @@ const calculateScores = (sample) => {
7476 for ( let i = 0 ; i < users . length ; i ++ ) {
7577 const user = users [ i ]
7678 let currScore = 0
79+ const lastTiebreakEligibleSolve = userTiebreakEligibleLastSolves . get ( user . id )
7780 const lastSolve = userLastSolves . get ( user . id )
7881 if ( lastSolve === undefined ) continue // If the user has not solved any challenges, do not add to leaderboard
7982 const solvedChalls = userSolves . get ( user . id )
@@ -84,7 +87,14 @@ const calculateScores = (sample) => {
8487 currScore += value
8588 }
8689 }
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+ ] )
8898 }
8999
90100 return {
@@ -95,12 +105,16 @@ const calculateScores = (sample) => {
95105
96106const userCompare = ( a , b ) => {
97107 // 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
99110 const scoreCompare = b [ 3 ] - a [ 3 ]
100111 if ( scoreCompare !== 0 ) {
101112 return scoreCompare
102113 }
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 ]
104118}
105119
106120const leaderboardUpdate = Math . min ( Date . now ( ) , config . endTime )
0 commit comments