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
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]:
In [203]:
answer(new_names)
Out[203]:
In [266]:
a = [ii for ii in range(len(new_names)) if new_names[ii] == "b"]
In [268]:
a[-1]
Out[268]:
In [ ]: