"""
FUNCTION: get_ranks
-------------------
This function takes a list of numbers and returns a list 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
"""
def get_ranks(lst):
"""
Computes competition-style ranks for a list of integers.
Steps:
1. Make a sorted copy of the list (descending)
2. Assign ranks to each unique value
3. Build a rank list matching the original order
"""
# Step 1: Create a sorted copy (descending)
sorted_values = sorted(lst, reverse=True)
# Step 2: Map each unique value to its rank
rank_map = {}
rank = 1
for value in sorted_values:
# Assign rank only once per unique value
if value not in rank_map:
rank_map[value] = rank
rank += 1 # next rank position
# Step 3: Build ranking list in original order
return [rank_map[value] for value in lst]
def print_ranking(lst, ranks):
"""
Prints the original list and its ranking.
"""
print("Original list:", lst)
print("Ranking list :", ranks)
# MAIN PROGRAM
# ---------------------------------------------
lst = [88, 4, 19, 4, 1, 31, 14, 1, 93, 17]
# Compute ranks
ranking_lst = get_ranks(lst)
print_ranking(lst, ranking_lst)
"""
run:
Original list: [88, 4, 19, 4, 1, 31, 14, 1, 93, 17]
Ranking list : [2, 7, 4, 7, 9, 3, 6, 9, 1, 5]
"""