Twilio | OA | SWE 2021
7273

Arranging names in ascending order , firstly by Name and then by roman numerals.

names = ['Louis V', 'Louis VI', 'Louis X', 'Peter I']
temp_Res = []
def sort_names(names):
    res = []
    for i in range(len(names)):
        space_pos = names[i].rindex(" ")
        num = convertR_toN(names[i][space_pos + 1:])
        name_val = names[i][:space_pos]
        temp_Res.append([name_val, num, names[i][space_pos + 1:]])
    
    sorted(temp_Res, key= lambda x: (x[0], x[1]))
    for i in range(len(temp_Res)):
        res.append(temp_Res[i][0] +' '+ temp_Res[i][2])
    print(res)

def convertR_toN(roman_val):
    conv_dict = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
    i, total = 0, 0
    if len(roman_val) == 1:
        return conv_dict[roman_val]
    while i < len(roman_val):
        if i + 1 < len(roman_val) and conv_dict[roman_val[i + 1]] > conv_dict[roman_val[i]]:
            total += conv_dict[roman_val[i + 1]] - conv_dict[roman_val[i]]
            i += 2
        else:
            total += conv_dict[roman_val[i]]
            i += 1
    return total
sort_names(names)
Comments (6)