In [269]:
def answer(names):
    value_dict = {}
    alphabet = "abcdefghijklmnopqrstuvwxyz"
    
    for ii in range(len(alphabet)):
        value_dict[alphabet[ii]] = ii+1 # evaluates letters

    
    def evaluate_name(name):
        # evaluate names
        values = []
        for letter in name.lower():
            values.append(value_dict[letter])
        
        return sum(values)
          
    names_and_values = {} # holds names and their values
    
    for ii in range(len(names)):
        names_and_values[names[ii]] = evaluate_name(names[ii])
    
    values = names_and_values.values()
    from_dict = names_and_values.keys()

    
    # this starts the sorting
    new_order = [from_dict[0]]

    for ii in range(len(from_dict)):
        jj = 0

        while (values[ii] < names_and_values[new_order[jj]]):
            if jj+1 == len(new_order):
                new_order.append(from_dict[ii])
            jj += 1

        if from_dict[ii] not in new_order:
            new_order.insert(jj, from_dict[ii])
            
    # check for any equivalent-valued names and re-order them if necessary
    for ii in range(len(new_order)):
        for jj in range(len(new_order)):
            word1 = new_order[ii]
            word2 = new_order[jj]
            
            
            # check if word values equal
            if (names_and_values[word1] == names_and_values[word2]) & (word1 != word2) & (ii < jj):
                if (value_dict[word1[0]] <= value_dict[word2[0]]):
                    new_order[ii] = word2
                    new_order[jj] = word1
                
                    ii += 1
                           
                    
    print names_and_values
    return new_order

In [270]:
# names = ["nick", "chris", "jen", "kyeisha","john","jack","joe","annette","zye","felix","xander","zxcv","zzd","y","abcdefg", "vi","annie","yyf","bonnie", "liz"]
names = ["ccccccac","cacccccc","cccacccc","ccccccac","ccaccccc"]
new_names = [random_name() for ii in range(20)]
a = answer(names)
# a = answer(new_names)
print a


{'ccccccac': 22, 'cccacccc': 22, 'cacccccc': 22, 'ccaccccc': 22}
['cacccccc', 'ccccccac', 'ccaccccc', 'ccccccac', 'cccacccc']

In [213]:
value_dict = {}
alphabet = "abcdefghijklmnopqrstuvwxyz"

In [219]:
def random_name():
    import numpy as np
    # generate number between 1 and 8 for name length
    nlen = np.random.randint(1,8)
    
    nstring = ""
    for ii in range(nlen):
        nstring += alphabet[np.random.randint(1, 26)]
    
    return nstring

In [80]:
random_name()


Out[80]:
'szzuxd'

In [203]:
answer(new_names)


{'ll': 24, 'vtj': 52, 'jtp': 46, 'ur': 39, 'tl': 32, 'u': 21, 'v': 22, 'x': 24, 'ew': 28, 'gl': 19}
Out[203]:
['vtj', 'jtp', 'ur', 'tl', 'ew', 'x', 'll', 'v', 'u', 'gl']

In [266]:
a = [ii for ii in range(len(new_names)) if new_names[ii] == "b"]

In [268]:
a[-1]


Out[268]:
2

In [ ]: