Я делаю project Euler #22, что в основном требует, чтобы вы просмотрели список имен в TXT-файле, отсортировали их в алфавитном порядке и затем суммировали значения букв в имени (a = 1, b = 2 и т. д.), умноженных на индекс каждого имени.Project Euler: оценка имени - добавление значений слов большого размера
Например, если список отсортирован в алфавитном порядке, COLIN, который стоит 3 + 15 + 12 + 9 + 14 = 53, является 938-м именем в списке. Таким образом, COLIN получит оценку 938 × 53 = 49714.
Я сделал следующее в Python, которое дает мне правильное значение в небольшом списке, но неверный ответ на фактический список (который равен +5000 имена). Похоже, что немного изменил реальный ответ.
list = ["MARY","PATRICIA"... "ALONSO"]
dictionary = {'A':1, 'B':2, 'C':3, 'D':4, 'E':5, 'F':6, 'G':7, 'H':8, 'I':9, 'J':10, 'K':11, 'L':12, 'M':13, 'N':14, 'O':15, 'P':16, 'Q':17, 'R':18, 'S':19, 'T':20, 'U':21, 'V':22, 'W':23, 'X':24, 'Y':25, 'Z':26}
list.sort()
total = 0
for i in list:
count = 0
for j in i:
count += (dictionary[j])
else:
count *= (list.index(i) + 1)
total += count
print(total)
Я знаю, что код немного грязный (я новичок), но я ломаю ум, но не могу думать ни о чем. Может ли кто-нибудь помочь мне, где я ошибся?
Спасибо!
Вы просуммировать значения букв? Причина в вашем сообщении, которое вы умножаете (в пояснении), а затем добавляете (в код). –
мой плохой, чтобы добавить в пример! – sahwahn
Вместо dict вы можете вычислить значение char с помощью 'ord (ch) - ord ('A') + 1'. Если имена повторяются, 'list.index (i) + 1' будет ошибочным. Попробуйте что-то вроде 'for index, name в enumerate (names, 1):'. Не используйте 'list' в качестве имени переменной, вы скрываете имя встроенного типа данных. –