誕生日が同じ確率


誕生日が同じ確率の計算方法についてはあちこちに書かれているのでそれを読んで頂くとして、やりたいのはせっかくのJ言語ですので実証です。?(クエスチョンマーク)というランダム動詞をつかって、40人の誕生日を作って、誕生日が同じ人がいるかどうか確認。40人だと90%くらいの確率で同じ誕生日の人がいるはずですので、数回やって同じ誕生日の人がいない回があったらびっくりしましょう。

   # ~. ? 365&* =~i.40
38

一応成功かな? 以下解説。

   i.10   NB.40人でやると多すぎるので10人でやります。
0 1 2 3 4 5 6 7 8 9   NB.10個の配列
   =~i.10   NB.=(イコール)を~(チルダ)で自分自身に作用
1 1 1 1 1 1 1 1 1 1   NB.すると10個の1の配列ができる
   365&* =~i.10   NB.それに365をかけると365の配列
365 365 365 365 365 365 365 365 365 365
   ? 365&* =~i.10   NB.?を作用すると0-364のランダム
196 337 61 168 279 206 55 86 160 134
   ~. ? 365&* =~i.10    NB.~.(チルダドット)は同じものを取る
46 177 204 110 248 323 161 260 319 24
   # ~. ? 365&* =~i.10   NB.#で数えて減っていたら誕生日が同じ人が居たことになる
10

10人の場合は結果も10ですので、誕生日が同じ人が居なかったけど、40人の場合は結果が38でしたので2組居たことになります。

   # ~. ? 365&* =~i.40
39
   # ~. ? 365&* =~i.40
37
   # ~. ? 365&* =~i.40
38
   # ~. ? 365&* =~i.40
38
   # ~. ? 365&* =~i.40
39
   # ~. ? 365&* =~i.40
38
   # ~. ? 365&* =~i.40
38
   # ~. ? 365&* =~i.40
38
   # ~. ? 365&* =~i.40
40
   # ~. ? 365&* =~i.40
39