ミルクシャッフル復元回数の依頼

 投稿者:GAI  投稿日:2010年 8月10日(火)06時05分0秒
  偶数枚のカードで
トップとボトムのカードを同時に引き出し、テーブルに置く。
次ぎも、同様に一緒に引き出しテーブルに出したカードの上に重ねて置く。
これを繰り返し、手元のカードが無くなるまで続ける。
これを1回目の操作とします。
再び、テーブルに重ねたカードを取り上げ2回目の操作をやる。
何回かこれを繰り返すとカードの順番が元の順序に戻る。
<例>
20枚なら12回の操作で元に戻りました。

これを再現できるプログラムを作って頂きたいのですが、
最初の枚数の指定が出来るようにしてもらったら有り難いです。

いつも自分で作ってみたいと思っているのですが、細かい部分の考え方が
わからなく、結局時間ばかりかかってしまって、つい依頼をお願いする次第です。
よろしくお願いいたします。
 

Re: ミルクシャッフル復元回数の依頼

 投稿者:山中和義  投稿日:2010年 8月10日(火)10時39分55秒
  > No.1331[元記事へ]

GAIさんへのお返事です。

> 偶数枚のカードで
> トップとボトムのカードを同時に引き出し、テーブルに置く。
> 次ぎも、同様に一緒に引き出しテーブルに出したカードの上に重ねて置く。
> これを繰り返し、手元のカードが無くなるまで続ける。
> これを1回目の操作とします。
> 再び、テーブルに重ねたカードを取り上げ2回目の操作をやる。
> 何回かこれを繰り返すとカードの順番が元の順序に戻る。
> <例>
> 20枚なら12回の操作で元に戻りました。

サンプルプログラム #1098 を使って
「シャッフルに相当する置換」を定義すると求まります。
置換は、「m番目のカードが、1回のシャッフルでn番目になる」という関係です。
DIM shuffle(N) !シャッフルに相当する置換
FOR i=1 TO INT(N/2)
   LET shuffle(i)=N-(2*i-1)
   LET shuffle(i+INT(N/2)+MOD(N,2))=2*i+MOD(N,2)
NEXT i
IF MOD(N,2)=1 THEN LET shuffle(INT(N/2)+1)=1


式が定義できない場合は、直接DATA文で値を設定してください。
DIM shuffle(N) !シャッフルに相当する置換
DATA 19,17,15,13,11,9,7,5,3,1, 2,4,6,8,10,12,14,16,18,20
MAT READ shuffle
 

戻る