【发布时间】:2009-08-06 23:27:03
【问题描述】:
生成列表列表(或打印,我不介意)大小为 N 的 Pascal's Triangle,代码行数尽可能少!
这是我的尝试(python 2.6 中的 118 个字符,使用 a trick):
c,z,k=locals,[0],'_[1]'
p=lambda n:[len(c()[k])and map(sum,zip(z+c()[k][-1],c()[k][-1]+z))or[1]for _ in range(n)]
解释:
- 列表解析的第一个元素(当长度为0时)是
[1] - 接下来的元素通过以下方式获得:
- 取出前一个列表并制作两个列表,一个在开头填充 0,另一个在末尾填充。
- 例如对于第二步,我们采用
[1]并制作[0,1]和[1,0]
- 例如对于第二步,我们采用
- 将两个新列表逐个元素相加
- 例如我们创建一个新列表
[(0,1),(1,0)]并用 sum 映射。
- 例如我们创建一个新列表
- 重复 n 次即可。
用法(带有漂亮的打印,实际上是代码-golf xD):
result = p(10)
lines = [" ".join(map(str, x)) for x in result]
for i in lines:
print i.center(max(map(len, lines)))
输出:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
【问题讨论】:
-
如果关闭,我将投票重新开放。我喜欢代码高尔夫。我不明白这有什么不好。
-
也许只有我一个人,但是......如果你不能用你的语言解析 XML 文件,我不会赞成。
-
@fortran,我对两者都很熟悉。我指的是代码高尔夫专门构建的专业语言,例如 K 和 J,在代码高尔夫问题中总是获得最多的投票,但除了代码高尔夫问题之外,你永远不会将它们用于任何其他事情。比 20 字符的 J 解决方案,比方说 50 个字符的 C 解决方案给我留下了深刻的印象。
-
@Triptych:K 和 J 不是代码高尔夫专用语言。另外,J 似乎有用于 xml 的模块,例如 jsoftware.com/jwiki/Addons/xml/sax 。
-
@Triptych:金融行业肯定在打代码,然后:kx.com/Customers/end-user-customers.php
标签: algorithm code-golf combinatorics discrete-mathematics pascals-triangle