鍋あり谷あり

テーマを決めずに適当に書いています。

ダイスで組分けもう一回

あれからだいぶ考え、もっとずっと速く計算する方法を思いついた。

require 'rational'

N=6

def perm(a,b)
  (0..b-1).inject(1){|r,i|
    r * (a-i)
  }
end

def combi(a,b)
  ((b+1)..a).inject(1){|r,i|
    r * i / (i-b)
  }
end

def count(n)
  (1..[N,n].min).inject(0){|sum,i|
    sum + perm(N,i) * (N-i)**(n-i) * combi(n,i) * [-1,1][i%2]
  }
end

(1..ARGV[0].to_i).each{|i|
  r=Rational( count( i ), N**i )
  puts "#{i} : #{r.to_f} == #{r}"
}  

これなら、300人の場合も一瞬で計算できる。多倍長整数万歳!

[-1,1][i%2]

は、(-1)**(i+1) でも i%2==0?-1:1 でも 1-i%2*2 でもよかったんだが、配列にしてみた。
こういうとき他の方々はどうしてるんだろと思ったり。

パフューム

Perfume 〜Complete Best〜 (DVD付)

Perfume 〜Complete Best〜 (DVD付)

Perfume~Complete Best~(DVD付)を買った。
現役アイドルのCDを買ったのは生まれて初めてかも。
ニコニコ動画等で聞いて購入に至ったんだが、オフラインの店で買った。
これを書いている今もかかっている。今朝も昨晩もかかっていた。


リニアモーターガール、コニューターシティ、エレクトロ・ワールド が聞きたくて買ったんだが、引力もなかなかいいかも。


ちなみに。
3人の顔と名前は全く一致してない。「のっち」という人が含まれていることは知ってるんだが、誰がのっちなのやら。

あーしかし。はまぞうを使うと今ひとつレイアウトがよくない。
こういうとき独自スタイルシートにしなけりゃよかったと思う。ありものに変えようか知らん。