リストのリストを生成 (または印刷、私は気にしません)可能な限り最小限のコード行で、サイズ Nのパスカルの三角形を生成します!
これが私の試みです(トリックを使用して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]
- 次の要素は次の方法で取得されます。
- 前のリストを取得して 2 つのリストを作成します。1 つは先頭に 0 をパディングし、もう 1 つは最後にパディングします。
- たとえば、2 番目のステップでは、取り
[1]
、作成[0,1]
し、[1,0]
- たとえば、2 番目のステップでは、取り
- 2 つの新しいリストを要素ごとに合計する
- たとえば、新しいリスト
[(0,1),(1,0)]
を作成し、合計でマップします。
- たとえば、新しいリスト
- n回繰り返すだけです。
使用法 (かなりの印刷で、実際には code-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