【问题标题】:Python Code ShorteningPython 代码缩短
【发布时间】:2011-04-18 15:41:55
【问题描述】:

我试图在这里解决这个问题:- https://www.spoj.pl/problems/PHIVAL/

这些问题要求您输出尽可能多的黄金比例 (1+sqrt(5))/2 的十进制数字,并尽量减少代码长度。

这就是我现在所拥有的。这段代码可以再短一点吗?

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

【问题讨论】:

  • 最快的方法是创建一个可以输出 100 万位 phi 的网页,并让您的程序为 echo curl mysite.com\phi :-)
  • 为什么要设置精度为 7050?为什么不是 9999?就像代码一样短,但数字更多。
  • @delnan 会超过时间限制。
  • @glowcoder .. 非常聪明 :) .. 但这不适用于 spoj。
  • 作为参考,codegolf.stackexchange.com 上有一大堆这些 spoj.pl 问题

标签: python code-snippets code-golf


【解决方案1】:

你可以去掉星号前面的空格。

更新:

您添加了关于无关紧要的空白的部分,所以我开始考虑另一种方法。如果不计算空格,您也许可以这样做

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








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

它将每个数字编码为多行字符串常量中一行上的多个空格。显然,您可以添加更多行以获得更多数字。它应该运行得很快,因为几乎没有计算完成。它使用 50(更新 2:45)非空白字符来产生任意数量的数字输出。

【讨论】:

  • 谢谢。但源长度计为非空白字符的个数。
  • @jack_carver:有了关于空白的新信息,我想出了另一种可能会产生更好结果的方法。
  • 如果不计算空格pastebin.com/uHR9TwQT,您可以将任何 python 代码设置为 44 个字符(或在 python2 中为 42 个字符)
【解决方案2】:

recursive 的方法发挥到极致,它只使用了 19 个非空白字符:

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

当然,生成前 1000000 位数字所需的代码长度将超过 10^1000000 个字符!

【讨论】:

    【解决方案3】:

    由于短代码的高分,我认为最好的方法可能只是

    print 1
    

    【讨论】:

    • score(ndigits=1, codelen=6) -> 2500001, score(7050, 68) -> 227638 必须有“小数点后至少有 1000 [位]。”
    【解决方案4】:

    好吧,我尝试了 javascript-ish 方法,但它显然在 Python 中不起作用:

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

    看起来您的代码非常接近最短的解决方案。

    【讨论】:

    • 是的。但由于公式的不同性质,我无法准确计算出最小源长度。那里最好的python解决方案得分为“307962”,而我的得分为“212528”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多