読んでいた本に、コインを5回投げて、オモテかウラが3回続けてでる確率は1/2と書いてありました。これをJ言語で確認してみました。
+/ +./"1 (0 0 0 E."1 (#: i.32)) 8
えっと、#:(シャープコロン)は右側引数を0と1の二進法のベクトルに変換しますので、#:i.32は0 0 0 0 0から1 1 1 1 1までの32行5列の行列を作ります。E.(ラージイードット)は左側の引数が右側引数のどこかにあればその最初に1が立ちます。0 0 0 E. 0 0 0 0 0ならば1 1 1 0 0が返ってきます。+.(プラスドット)はブール代数のORで、左右引数のどちらかが1(正)ならば1を返します。+./というようにベクトル全体に適用すると、ベクトル内がすべて0(偽)でない限り1を返します。E."1と+./"1の両方にある"1(クオートいち)は#:i.32で作られた行列の行方向に動詞を作用させるための副詞です。最後に+/で合計すると32個の例の中に0 0 0がある例が8個であることがわかります。1 1 1でも同様に8個ありますので、合計8 + 8 = 16 => 16 / 32 = 1 /2で、確率は1 / 2。
あといろいろ実験です。
NB.3回投げて2回続けてでる確率は? i.8 0 1 2 3 4 5 6 7 #:i.8 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 (0 0 E."1 #:i.8) 1 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 +./"1 (0 0 E."1 #:i.8) 1 1 0 0 1 0 0 0 +/ +./"1 (0 0 E."1 #:i.8) 3
というわけで3 + 3 = 6 => 6 / 8 = 3 / 4の確率になりました。ふむ。
あ、これは問題が間違えてますね。
6回投げて4回はどうでしょうか。
+/ +./"1 (0 0 0 E."1 (#: i.32)) 8 +/ +./"1 (0 0 0 0 E."1 (#: i.64)) 8 +/ +./"1 (0 0 0 0 0 E."1 (#: i.128)) 8 +/ +./"1 (0 0 E."1 (#: i.16)) 8 +/ +./"1 (0 E."1 (#: i.8)) 7 +/ +./"1 (0 0 0 0 0 0 E."1 (#: i.256)) 8