Leaderboard System with SortedMap
Create a game leaderboard that maintains players in score order.
Implementation
import { SortedMap } from '@msnkr/data-structures';
interface PlayerScore {
username: string;
timestamp: Date;
}
// Sorted by score (higher is better)
const leaderboard = new SortedMap<number, PlayerScore>({
comparator: (a, b) => b - a, // Descending order
});
// Add player scores
leaderboard.set(100, { username: 'alice', timestamp: new Date() });
leaderboard.set(250, { username: 'bob', timestamp: new Date() });
leaderboard.set(180, { username: 'charlie', timestamp: new Date() });
// Get top player
const [topScore, topPlayer] = leaderboard.firstEntry();
console.log(`${topPlayer.username} leads with ${topScore} points!`);
// Output: "bob leads with 250 points!"
// Display top 3
let rank = 1;
for (const [score, player] of leaderboard) {
console.log(`#${rank}: ${player.username} - ${score} points`);
if (rank++ === 3) break;
}
Output
#1: bob - 250 points
#2: charlie - 180 points
#3: alice - 100 points
Update Player Score
// Update score (remove old, add new)
leaderboard.delete(100); // Remove alice's old score
leaderboard.set(300, { username: 'alice', timestamp: new Date() }); // New top score!