靴下問題


数学、パズルで、靴下問題と呼ばれる問題があって、黒と茶色の靴下が引き出しに入っているのを暗闇で取り出すのに最低何枚で同じ色がそろうか、というのがあります。答えは3枚です。3色ならば4枚、4色なら5枚ですね。これはこれでおもしろい。


さて、わたしは5本指靴下(紺とグレー)を愛用していて、引き出しにいっぱい詰まっているのですが、これが毎朝、5、6本取り出してもどちらの色も揃いません。揃わないことがよくある。右足用と左足用があるからですが、上記の靴下問題と違って、最低何本取り出せば揃うかという質問がまず成立しません。数を限定すれば可能なのですが、仮に無限として、5本取り出したときにどちらの色にせよ、揃う確率を知りたい。というわけで計算してみます。計算というより、総当りですので「数えてみます」が、正しいかな。


重複あり、反復ありの数え上げですね。順列ではない。紺右、紺左、グレー右、グレー左と4種類あるので、これを0, 1, 2, 3とすると、たとえば2回とると、0 0, 0 1, 0 2, 0 3, 1 0, 1 1, 1 2, 1 3, 2 0, 2 1, 2 2, 2 3, 3 0, 3 1, 3 2, 3 3の16通りがあって、このうち揃っているのは0と1の両方のあるものと、2と3の両方があるもののどちらかです。4つありますね。というわけで、確率は4 / 16 = 0.25になります。3回で4^3=64通り、4回で4^4=256通り、5回で4^5=1024通り、6回で4^6=4096通りと増えて行きますので、手で数えるのは無理っぽい。あまり美しくはないのですが、J言語で、試行錯誤しながら、数えてみました。

   +/ ( (*./@(2 3&e.)) +.(*./@(0 1&e.)))"1 (1024 5$,> { (0 1 2 3); (0 1 2 3);(0 1 2 3);(0 1 2 3);(0 1 2 3))
900
   900 % 1024
0.878906
   +/ ( (*./@(2 3&e.)) +.(*./@(0 1&e.)))"1 (4096 6$,> { (0 1 2 3); (0 1 2 3);(0 1 2 3);(0 1 2 3);(0 1 2 3);(0 1 2 3))
3844
   3844 % 4096
0.938477

というわけで、6本とっても揃う確率は95%を超えません。
上記の式の解説、もしくは整理はまたいつか追記します。

追記:右用と左用がある場合は手袋問題というのがいいかもしれない。


解説:
左半分が、0と1と両方あるものと、2と3の両方があるもののORを取って数え上げています。e.(イードット、メンバー)というのが左側の値が右の値の中にあるかどうかを返してくれるので、*.(アスタリスク、アンド)でそのANDをとることによって、揃っているかどうかがわかります。2 3についても同じことをやって+.(プラスドット、オア)でORを取って数えています。
右側は、{(左波かっこ、カタログ)で、右側のボックス要素のそれぞれの網羅的な組合せたボックスを作りますのでそれを>(大なり記号)でボックスからはずして、カンマでつないで、引数を与えてテーブルにしています。この辺はもっとこなれたフレーズがあるに違いありませんが、まだ見つかっていません。
左半分のテストプログラムを作用させると右側全体にかかってしまいますので、"1(クオート1)でランクを指定して、場合のそれぞれについて、テストをしています。


以上