Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 15.09.2021
Сообщений: 8

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

18.09.2021, 15:23. Показов 2208. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru