2010年04月23日

code golf その15

次は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 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック