次は
Pascal's Triangle。パスカルの三角形。明確な定義はググるべきではあるが、必要な出力は以下のような感じ。
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
1 10 45 120 210 252 210 120 45 10 1
上の二つを加算。このルールに則って34行出力する。と書けば分かるか。では。
T=[0]
i=1
while i<35:
v=[0]*34
for j in range(i):v[j]=T[j]+T[j-1]or 1
print' '.join(map(str,filter(lambda x:x,v)))
T=v;i+=1
これで127byte。pythonのトップは63byte。単純なだけにえらく短い。
T=1,0
i=1
while i<35:
v=[0]*34
for j in range(i):v[j]=T[j]+T[j-1];print v[j],
print;T=v;i+=1
95byte。もっとそれらしく考えるべきなのか。
f=lambda x:x and x*f(x-1)or 1
for n in range(34):
for r in range(n+1):print f(n)/f(r)/f(n-r),
print
nCrで101byte。増えた。どっちに焦点を当てて行くべきか。
posted by s.s.s.r at 23:56|
Comment(0)
|
TrackBack(0)
|
python
|

|