Сокращение кода Python - PullRequest
       43

Сокращение кода Python

5 голосов
/ 18 апреля 2011

Я пытался решить эту проблему здесь: - https://www.spoj.pl/problems/PHIVAL/

В вопросах предлагается вывести как можно больше десятичных цифр золотого сечения (1 + sqrt (5)) / 2, а также попытаться минимизировать длину кода.

Это то, что у меня есть сейчас. Можно ли сделать этот код короче?

from decimal import *
getcontext().prec=7050
print(1+Decimal(5).sqrt())/2

Ответы [ 4 ]

3 голосов
/ 18 апреля 2011

Вы можете убрать пробел перед звездочкой.

Обновление:

Вы добавили часть о незначительных пробелах, поэтому я начал думать о другом подходе.Если пробел не учитывается, вы можете сделать что-то вроде этого

print"1."+`map(len,"""      








       """.split("\n"))`[1::3]

Он кодирует каждую цифру как количество пробелов в строке в многострочной строковой константе.Очевидно, что вы можете добавить больше строк, чтобы получить больше цифр.Он должен работать довольно быстро, так как очень мало вычислений.Для вывода любого количества цифр используется 50 (обновление 2: 45) непробельных символов.

1 голос
/ 19 апреля 2011

С учетом подхода recursive к экстремальным значениям используются только 19 непробельных символов:

print '1.%d'%len('                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ')

Конечно, код, необходимый для генерации первых 1000000 цифр, будет более 10 ^ 1000000 символовв длину!

0 голосов
/ 18 апреля 2011

Ну, я попробовал подход javascript-ish, и он явно не работает в Python:

import decimal
decimal.__dict__.values()[17]().prec = 7050
...

Похоже, ваш код очень близок к кратчайшему из возможных решений.

0 голосов
/ 18 апреля 2011

Из-за высокой оценки короткого кода, я думаю, что лучший подход может быть просто

print 1
...