Форум сайта python.su
Isem3.6 на 2.4 ггц, а весь скрипт:
Операцияуже работает более 0.5 сек на 3ГГц процессоре.n = str(10**100000)
import re import time x = 10**100000 def f(x): m = re.match("^(\d*?)(\d0*)$", '0'+x) part1 = str(int(m.group(1))+1) delta = (sum(map(int, x))-sum(map(int, part1))) part2 = str(delta%9)+'9'*(delta//9) return int(part1)*10**len(m.group(2))+int(part2) start = time.time() f(str(x)) print (time.time() - start)
Офлайн
А как насчет x = 10**100000-1 или x = 10**100000 - 10**10000 + 1 ?
А еще лучше, когда x = 10**100000 - 10**99999 + 1.
Отредактировано Isem (Окт. 24, 2013 09:18:14)
Офлайн
IsemСказал же уже - избавься от регулярки и мапов, всё отлично укладывается. Алгоритм дольше всего работает с нулями и девятками на конце(999…00).
А как насчет x = 10**100000-1 или x = 10**100000 - 10**10000 + 1 ?
А еще лучше, когда x = 10**100000 - 10**99999 + 1.
Отредактировано Euler (Окт. 24, 2013 14:31:56)
Офлайн
EulerТы чо, птица-говорун?
Сказал же уже
EulerТвой код - вот ты и избавляйся. Или это не твой код и ты птица-говорун?
избавься от регулярки и мапов
EulerКакая небыстрая голова - такой и небыстрый питон.
Вообще задача не для питона - питон простой, удобный, но никак не быстрый.
Офлайн
IsemА может правильнее тебе нужно - ты и избавляйся? Я у себя проверил, алгоритм укладывается в отведённое время, если тебе нужна готовая реализация, то придётся и самому немного подумать. Хамство тебе тут никак не поможет.
Твой код - вот ты и избавляйся.
Офлайн
Euler
Я у себя проверил, алгоритм укладывается в отведённое время
Isem
А как насчет x = 10**100000-1 или x = 10**100000 - 10**10000 + 1 ?
А еще лучше, когда x = 10**100000 - 10**99999 + 1.
EulerСпасибо, мне помощь не нужна. Хамите вы, сударь.
Хамство тебе тут никак не поможет.
Офлайн
Euler, не дескридетируйте имя гения.
p.s. Главное - написать без ошибок.
Отредактировано Isem (Окт. 24, 2013 17:15:29)
Офлайн
IsemТогда чего ты у меня готовый ответ клянчишь? Причём такой, в котором ни строчки меняте не надо, поскольку и словестное описание и пример реализации я дал.
Спасибо, мне помощь не нужна.
IsemГде именно?
Хамите вы, сударь.
Офлайн
EulerВезде. Не слышите собеседника, игнорируете примеры с вопросами, неадекватно реагируете. Это либо хамство, либо тупость, либо и то и другое. Скорее всего тупость, и как следствие - хамство, выражающееся в неадекватности.
Где именно?
Офлайн