検証のお願い

 投稿者:GAI  投稿日:2009年 8月14日(金)11時17分50秒
  52枚のトランプをよくシャッフルした後、1~10の数字を一つ決める。
その数字に従い、まずデックのトップからその枚数だけテーブルに一枚ずつテーブルへ表向きに重ねていく。そして最後に出したカードの数字に従い(ただし絵札は数字5とする。)手元のパケットから再びカードを最後にカードが出せなくなるまでテーブルへ重ねていくことを繰り返していくとする。この最後のカードに当たるもの(テーブルに表向きに重ねたカードのトップのカード)が、最初に選択した数字の1~10に関わらず常に一定のカードになるという確率が5/6(約83%)という法則(クルスカル原理)が成り立つ書かれている書物を読みました。
このことをコンピュータでソフト的に実証して頂けませんか?
 

Re: 検証のお願い

 投稿者:山中和義  投稿日:2009年 8月14日(金)13時39分2秒
  > No.478[元記事へ]

GAIさんへのお返事です。
!クルスカル・カウント(Kruskal count)

LET N=52 !カードの枚数

LET mk$="SCHD" !カードのマーク
LET nm$="A234567890JQK" !カードの番号

DEF s2n(s)=MOD(s-1,13)+1 !連番をカードの番号へ
DEF s2m(s)=INT((s-1)/13)+1 !連番をカードのマークへ


DIM c(N) !カードの並び

SUB card_initialize(c(),N) !カードを整列する
   FOR i=1 TO N
      LET c(i)=i
      !!!PRINT i;s2m(i);s2n(i)
   NEXT i
END SUB

RANDOMIZE
SUB shuffle_randomize(c(),N) !ランダムにシャッフルする
   FOR i=N TO 2 STEP -1
      LET j=INT(RND*(i-1))+1 !1~i-1
      swap c(i),c(j)
   NEXT i
END SUB
!------------------------------ ここまでがサブルーチン

CALL card_initialize(c,N)
CALL shuffle_randomize(c,N)
MAT PRINT c;

FOR r=1 TO 10 !好きな数字

   LET p=r !その数字の枚数分、トランプを上から順に表向きにして机の上に重ねて配る(順番を崩さないため)

   DO WHILE p<=N !手持ちのトランプの残りがなければ、終了。
      PRINT c(p); !表向きの一番上のトランプの数字

      LET t=s2n(c(p)) !1~13
      IF t>10 THEN LET t=5 !絵札はすべて5とする

      LET p=p+t !次へ
   LOOP
   PRINT

NEXT r !机の上の表向きのトランプを全て取り上げて裏向きにし、手持ちのトランプの上に戻す

END
 

戻る