/*
FUNCTION: getRanks
-------------------
This function takes an array of numbers and returns an array of ranks.
Ranking rules used (Competition Ranking):
-----------------------------------------
- Highest value gets rank 1
- Equal values get the same rank
- Next rank increases by the number of equal values
Example:
Values: 88, 4, 19, 4, 1, 31, 14, 1, 93, 17
Ranks: 2, 7, 4, 7, 9, 3, 6, 9, 1, 5
*/
function getRanks(arr) {
// Step 1: Create a sorted copy (descending)
const sorted = [...arr].sort((a, b) => b - a);
// Step 2: Map each value to its rank
const rankMap = new Map();
let rank = 1;
for (let i = 0; i < sorted.length; i++) {
const value = sorted[i];
// If value not ranked yet, assign current rank
if (!rankMap.has(value)) {
rankMap.set(value, rank);
}
// Increase rank for next position
rank++;
}
// Step 3: Build the ranking array using the map
return arr.map(value => rankMap.get(value));
}
/*
FUNCTION: printRanking
-----------------------
Prints the original array and its ranking.
*/
function printRanking(arr, ranks) {
console.log("Original array:", arr);
console.log("Ranking array :", ranks);
}
// MAIN PROGRAM
// ---------------------------------------------
const array = [88, 4, 19, 4, 1, 31, 14, 1, 93, 17];
// Compute ranks
const rankingArray = getRanks(array);
printRanking(array, rankingArray);
/*
run:
Original array: [
88, 4, 19, 4, 1, 31, 14, 1, 93, 17
]
Ranking array : [
2, 7, 4, 7, 9, 3, 6, 9, 1, 5
]
*/