0 / 0 / 0
Регистрация: 15.09.2021
Сообщений: 8

Задача Эйлера 22

18.09.2021, 15:23. Показов 2232. Ответов 6

Студворк — интернет-сервис помощи студентам
Очень понравилась задача, тут и работа с файлами и обработка, сортировка данных. Для начинающего самое то.
Файл по для задачи можно скачать тут: Проект Эйлера, а также ознакомиться с условием задачи.

Мой вариант решения (время выполнения - 15.7, мне кажется неплохой результат). Какие будут замечания по коду?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from time import time
from halo import Halo
import math
 
 
list_f = []
spinner = Halo(text='>>> Loading...', spinner='dots', placement='right')
spinner.start()
 
#Рассчитываем вес имени
def LetterHandler (Name):
    alphabet = [w for w in 'QWERTYUIOPASDFGHJKLZXCVBNM']
    alphabet.sort()
    numbers = [n for n in range(1, 27)]
    L_Name = list(Name)
    #L_Name = x.split()
    print('>>> {Name} - {L_Name}'.format(Name=Name, L_Name=L_Name))
    Weight = []
    for i in L_Name:
        Weight.append(numbers[alphabet.index(i)])
    result = sum(Weight)
    spinner.succeed(text='>>> Получен вес имени...')
    return result
 
 
def Main_Handler (string_names):
#Получаем на входе строку, производим сортировку
    FinishList = []
    NewList = string_names.split(sep=',')
    NewList.sort()
 
#Приводим данные к нужному нам виду, удаляем лишние элементы.
    for x in NewList:
        new_x = str(x).replace('"', '')
        y = NewList.index(x)
        NewList[y] = new_x
 
#Проходимся по списку имен, получаем вес имени и порядковыей номер
    for i in NewList:
        a = NewList.index(i) + 1 
        b = LetterHandler(i) # Подключаем функцию, чтобы рассчитать вес имени
        FinishList.append(a*b) #Собираем все очки в один список
#Выводим результат
    result = sum(FinishList)
    spinner.succeed(text='>>> Общий результат получен...')
    return result
 
def work_file(name_file): 
#Открываем файл, получаем данные, собираем в строку и передаем дальше.
    f = open(name_file)
 
    for i in f:
        list_f.append(i)
 
    str_f = " ".join(list_f)
    
    f.close()
    spinner.succeed(text='>>> Файл обработан...')
    return str_f
 
 
start_time = time()
print('>>> ', Main_Handler(work_file('p022_names.txt')))
finish_time = time() - start_time
print('>>> Время выполнения....{time}'.format(time=round(finish_time,2)))
spinner.stop()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2021, 15:23
Ответы с готовыми решениями:

Задача Эйлера 25
Решил очередную задачу, показалась легкой. Нужно найти порядковый номер первого члена последовательности Фибоначчи, содержащего 1000 цифр. ...

2 задача проекта Эйлера в одну строку
Как можно решить 2 задачу проекта Эйлера в одну строку

Задача Эйлера № 7 Про простые числа
Условия задачи таковы Выписав первые шесть простых чисел, получим 2, 3, 5, 7, 11 и 13. Очевидно, что 6-е простое число - 13. ...

6
enx
 Аватар для enx
1190 / 766 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
18.09.2021, 15:28
Python
1
2
a = sorted(open(0).read().replace('"', '').split(",")) # я делал с подачей через консоль, а так with open()
print(sum(sum(ord(k) - 64 for k in a[i]) * (i + 1) for i in range(len(a))))
0
0 / 0 / 0
Регистрация: 15.09.2021
Сообщений: 8
18.09.2021, 15:32  [ТС]
Не могу понять вторую строку, можете объяснить?
0
enx
 Аватар для enx
1190 / 766 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
18.09.2021, 15:40
_ViDaR_, начнем с оригинала задачи:

Names scores
Using names.txt (right click and 'Save Link/Target As...'), a 46K text file containing over five-thousand first names, begin by sorting it into alphabetical order. Then working out the alphabetical value for each name, multiply this value by its alphabetical position in the list to obtain a name score.

For example, when the list is sorted into alphabetical order, COLIN, which is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So, COLIN would obtain a score of 938 × 53 = 49714.

Нам нужно посчитать сумму очков в имени, где буква соответствует определенному числу: A = 1, B = 2 и тд.
Преобразуем поток в список имен, каждое имя преобразуем в символы, а от значения юникода этих симовлов, отнимаемая 64 от каждого, получаем сумму имени. Выводим общую сумму списка.

Собственно все.

Мой вам совет, как человека решившего Эйлера до 146, идите сразу на задачи 50+.
0
0 / 0 / 0
Регистрация: 15.09.2021
Сообщений: 8
18.09.2021, 15:43  [ТС]
Ух ты интересно, нужно будет прочитать про такой способ. Спасибо за совет, обязательно попробую.
0
enx
 Аватар для enx
1190 / 766 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
18.09.2021, 15:59
_ViDaR_, вам так будет проще понять решение, запустите:

Python
1
2
for i in range(ord('A'), ord('Z') + 1):
    print(f'{chr(i)} в юникоде это {i} а минус 64 это {i - 64}')
Добавлено через 9 минут
Хотя вру, еще 11 задача крайне толковая, особенно если у вас не так развит опыт обхода массивов.
Естественно ее надо решать без numpy.
0
0 / 0 / 0
Регистрация: 15.09.2021
Сообщений: 8
19.09.2021, 01:29  [ТС]
Да спасибо, почитал про это, так намного легче и можно функцию LetterHandler убрать вообще и при получении имени из списка сразу посчитать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2021, 01:29
Помогаю со студенческими работами здесь

Задача Эйлера 4
Написал собственное решение, исходя из тех знаний, которые приобрел за 5 предыдущих дней обучения: ddef poly(n): lisn= while...

Задача Эйлера
Здравствуйте. Хочу решить четвертую задачу Эйлера, а именно: Число-палиндром с обеих сторон (справа налево и слева направо) читается...

Проект Эйлера. Задача 5
День добрый! Решаю пятую задачу Проекта Эйлера: "2520 - самое маленькое число, которое делится без остатка на все числа от 1 до...

Проект Эйлера задача 15
Начиная в левом верхнем углу сетки 2×2 и имея возможность двигаться только вниз или вправо, существует ровно 6 маршрутов до правого нижнего...

Проект Эйлера задача 18
Нужно начиная в вершине треугольника и перемещаясь вниз на смежные числа,так максимальная сумма до основания составляет 23. 3 7 4 2 4...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru