結果発表。3問正解。っていうか国民主権は試験範囲じゃなかった罠。
3問正解というのがどれくらいアレなのか計算してみる。
今回は試験範囲(と思ってた範囲)の問題が、ネタ本には76問ある。
したがってそこから8問選ぶ組み合わせは 76C8 = 188億5588万3575通り。
そんでもって、自分で選んだ8個の中から1問正解するのは 68C7 × 8C1 = 77億5555万1232通り。
以下同様に

  • 2問: 68C6 × 8C2 = 30,6469,3632
  • 3問: 68C5 × 8C3 = 5,8375,1168
  • 4問: 68C4 × 8C4 = 5700,6950
  • 5問: 68C3 × 8C5 = 280,6496
  • 6問: 68C2 × 8C6 = 6,3784
  • 7問: 68C1 × 8C7 = 544
  • 8問: 68C0 × 8C8 = 1

したがって3問以上正解する確率は
\frac{583751168 + 57006950 + 2806496 + 63784 + 544 + 1}{18855883575} = \frac{643628943}{18855883575} \approx 3.4%
より 3.4% しかない。…思ったよりすげぇ!
これはツネ様検定3級くらいでないの?
ちなみにランダムに選んだ場合の正解数の期待値は 0.84 くらい。


8問に絞る前にピックアップした10問の中では4問正解。この確率は
\frac{_{66}\mathrm{C}_4\times_{10}\mathrm{C}_4 + _{66}\mathrm{C}_3\times_{10}\mathrm{C}_5 + _{66}\mathrm{C}_2\times_{10}\mathrm{C}_6 + _{66}\mathrm{C}_1\times_{10}\mathrm{C}_7 + _{66}\mathrm{C}_0\times_{10}\mathrm{C}_8}{_{76}\mathrm{C}_8} = \frac{151351200 + 11531520 + 450450 + 7920 + 45}{18855883575} \approx 0.32%
ちゅうわけで 0.32% にまで少なくなる。まぁ今回は三連単という方針なので、こいつは参考記録


で、何がアレかって、こんなものを試験前に地道にカリカリ計算していた私はアホかと。
しかも携帯電話の電卓が一億の位までしか計算できないので、ある程度の桁からは手作業。
こういう(量ばっかり多い)単純計算って癒されるね。
でも計算機のない時代の科学者はすんごい大変だったろうな、と思う。


日記に書き起こすにあたっては、上の計算をスクリプト組んで検算してある。
期待値の計算で、足し算の繰り上がりミスってた。

#!/usr/bin/python
# coding:utf-8
# tsunesama.py
# 組み合わせを計算するための関数群

# 順列を計算する関数。 mPn
def P(m, n):
    result = 1
    for x in range(m-n+1, m+1):
        result *= x
    return result

# 組み合わせを計算する関数。 mCn
def C(m, n):
    if n > m-n : n=m-n
    return P(m,n) / P(n,n)

# 総和を計算する関数。numsは数字のリスト。
def sum(nums):
    result = 0
    for num in nums:
        result += num
    return result

という関数群を別ファイル(tsunesama.py)に書いておいた上で(本当はアルファベット1文字の関数名は嫌いだけど)、

>>> from tsunesama import *
>>> all = C(76,8)
>>> all
18855883575L
>>>
>>> ans = []
>>> for x in range(1,9):
...     ans.append( C(68,8-x) * C(8,x) )
... 
>>> ans
[7755551232L, 3064693632L, 583751168, 57006950, 2806496, 63784, 544, 1]
>>> ans[2:] #3問以上正解する事象
[583751168, 57006950, 2806496, 63784, 544, 1]
>>> sum(ans[2:])
643628943
>>> 100.0 * sum(ans[2:]) / all #3問以上正解する確率(%)
3.4134117366600254
>>>
>>> #期待値の計算
>>> ptane = []
>>> for x in range(1,9):
...     ptane.append(ans[x-1]*x)
... 
>>> ptane
[7755551232L, 6129387264L, 1751253504, 228027800, 14032480, 382704, 3808, 8]
>>> 1.0 * sum(ptane) / all #期待値
0.84210526315789469
>>>
>>> #参考記録:10問選んで4問正解の確率計算
>>> sub = []
>>> for x in range(1,9):
...     sub.append( C(66,8-x) * C(10,x) )
... 
>>> sub
[7787894400L, 4088644560L, 1072431360, 151351200, 11531520, 450450, 7920, 45]
>>> 100.0 * sum(ans[3:]) / all
0.31755486165277724