ルーレットを回して,赤と黒の出る順番を当てる賭けをしましょう

Last-modified: 2008-12-25 (木) 02:50:06

確率的後手必勝のゲーム

****************************************************************
rB.sas
ルーレットを回して,赤と黒の出る順番を当てる賭けをしましょう.

お互いに3つの赤黒の列を決めて,何回かルーレットを回し,
先に自分の予想した3列がでたら勝ちです.
たとえば,あなたの予想が黒赤黒(BrB)で,私が赤黒赤(rBr)にしたとします.
ルーレットを繰り返し回して,先に黒赤黒の並びがでればあなたの勝ち,
その前に赤黒赤がでれば私の勝ちです.

では,どうぞ,あなたから先に決めてくださっていいですよ.
もちろん,赤と黒はランダムで,1/2ずつの確率です.
いんちきルーレットではありません.
黒黒黒(BBB)ですね.では私はそれ以外で,えー赤黒黒(rBB)にしましょう.
掛け金は1万円でいいですか?あなたが勝てば1万円差し上げます.
私が勝てば1万円くださいね.よろしいですね.
では,100回ぐらいやりましょうかね.

参考文献:Marilyn von savant: The Power of logical thinking,
より,マーチン・ガートナーの出題を脚色
****************************************************************;

options nocenter;

%macro rB(you,me);
data rB;
  length x1-x100 $ 3;
  array x(100) $ x1-x100;
  do t=1 to 100; /* 試行100回 */
    label you_win=" you_win-あなたの勝ち(1)";
    you_win=.; /* 1:あなたの勝ちフラグ */
    do i=1 to 100; /*100回まわして勝負つかずはドローとした*/
      rB="r";
      if ranuni(0)<0.5 then rB="B"; /*赤黒のルーレットを振る*/
      rB1=lag1(rB);
      rB2=lag2(rB);
      x(i)=compress(rB2||rB1||rB);/*つづく3つの赤黒系列*/
      if you_win=. and x(i)="&you" then you_win=1;/*先に出たものの勝ち(あなた)*/
      if you_win=. and x(i)="&me" then you_win=0;/*先に出たものの勝ち(わたし)*/
    end;
    output;
  end;
run ;

proc freq;tables you_win/missing;run;

%mend;

%rB(you=BBB,me=rBB); *あなたの勝ち目は1/8しかない! ;

/*

                  you_win-あなたの勝ち(1)

                                       累積         累積
you_win      度数      パーセント      度数      パーセント
-----------------------------------------------------------
      0          85       85.00            85       85.00
      1          15       15.00           100      100.00
 */

%rB(you=BBr,me=rBB); *あなたの勝ち目は1/4しかない! ;
%rB(you=BrB,me=BBr); *あなたの勝ち目は1/3しかない! ;
%rB(you=Brr,me=BBr); *あなたの勝ち目は1/3しかない! ;