小编典典

高尔夫球代码:生成帕斯卡三角形

algorithm

生成一个列表列表(或打印,我不介意),以最小的代码行显示N大小的Pascal三角形

这是我的尝试(使用技巧 python 2.6中的
118个字符):

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填充,另一个列表的末尾填充。
    • 例如,对于第2步,我们采取[1]和化妆[0,1][1,0]
  • 将两个新列表元素相加
    • 例如,我们创建一个新列表[(0,1),(1,0)]并使用总和进行映射。
  • 重复n次,仅此而已。

用法(打印漂亮,实际上超出了代码高尔夫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

阅读 271

收藏
2020-07-28

共1个答案

小编典典

J ,APL系列的另一种语言,9个字符:

p=:!/~@i.

它使用J的内置“组合”动词。

输出:

   p 10
1 1 1 1 1  1  1  1  1   1
0 1 2 3 4  5  6  7  8   9
0 0 1 3 6 10 15 21 28  36
0 0 0 1 4 10 20 35 56  84
0 0 0 0 1  5 15 35 70 126
0 0 0 0 0  1  6 21 56 126
0 0 0 0 0  0  1  7 28  84
0 0 0 0 0  0  0  1  8  36
0 0 0 0 0  0  0  0  1   9
0 0 0 0 0  0  0  0  0   1
2020-07-28