確率的後手必勝のゲーム
****************************************************************
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しかない! ;