2010年04月24日

code golf その16

チーッス。Choose。チューズ。何コレ?
えー、入力がn, kである場合、n!/(k!(n-k)!)を求めればいいらしい。組み合わせのnCr。では。

I=input()
f=lambda x:x and x*f(x-1)or 1
print f(I[0])/f(I[1])/f(I[0]-I[1])
Pascal's Triangleで使った階乗がそのまま使えたので使ってみる。で、74byte。pythonのトップは39byte。オオゥ。どうにか弄ろう。

n,k=input()
f=lambda x:x and x*f(x-1)or 1
print f(n)/f(k)/f(n-k)
リストにする必要はまるでなかったので修正。が、まだ64byte。単純なだけに問題が浮き彫りになる。nCrの計算をもっとシンプルに出来る方法があるのか、あるいは階乗の計算の方か。
例えば、再帰を使わずに。

n,k=input()
f=lambda a:a and reduce(lambda x,y:x*y,range(1,a+1))or 1
print f(n)/f(k)/f(n-k)
これだと92byte。長すぎる。

Pascal's Triangleと併せて考え直した方が良さそう。

posted by s.s.s.r at 22:17| Comment(0) | TrackBack(0) | python | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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


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

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