あるシャッフル方法の規則性

 投稿日:2008年11月23日(日)12時46分19秒
  例:1から18の番号順にカードが並んでいるとする。(裏向きトップが1)
このカード群を裏向きに持ち、上から1枚ずつ裏向きのままテーブルへ左から右へ3枚並べ
たら、元に戻って2枚目をまた左から右の山へ配る。
これを繰り返しそれぞれの山の枚数が6枚ずつになり、手持ちのカードが無くなる。
次に左の山を持ち上げ、隣の山に重ね、重なった山を持ち上げ、右の山へ重ね一つにする。
このシャッフルを繰り返すと9回繰り返した時点で、カードの順番が元に戻る。
このシャッフルの規則を調べたい(元の状態にどの条件で戻るのか)のですが、
一般にカードがn枚あり
山をp個(p<=nとする)作って、このシャッフルをしていく場合、何回繰り返せば元に戻るのでしょうか?
(n=7,p=3なら3回で元に戻りました。)

これを知るためのプログラムを作って貰えないでしょうか?
これを使って新作のカードマジックを作りたいのでよろしくお願いします。
ちなみに、トランプ全部52枚の場合2山、3山、4山、・・・、13山
での復元回数も知りたいのですが・・・
 

Re: あるシャッフル方法の規則性

 投稿日:2008年11月24日(月)08時50分50秒
  > No.109[元記事へ]

GAIさんへのお返事です。
自分へ返事を出すのも変ですが、私なりのプログラムを作って調べてみました。

!4山でのシャッフル調査
100 OPTION BASE 1
110 INPUT  PROMPT "カードの枚数は?":n
120 INPUT  PROMPT "山の数は?:4を入力しておいて下さい。":p
130 INPUT  PROMPT "シャッフル回数?":t
140
150 DIM a(n)
160 DIM b(n)
170 DIM c(n)
180 DIM d(n)
190 DIM e(n)
200 DIM f(n)
210
220 FOR i=1 TO n
230    LET a(i)=i
240 NEXT i
250
260 FOR q=1 TO t
270    FOR k=1 TO INT(n/p)
280       LET b(k)=a(p*(k-1)+1)
290       LET c(k)=a(p*(k-1)+2)
300       LET d(k)=a(p*(k-1)+3)
310       LET e(k)=a(p*(k-1)+4)
320       PRINT USING "####":b(k);
330       PRINT USING "####":c(k);
340       PRINT USING "####":d(k);
350       PRINT USING "####":e(k);
360       PRINT
370    NEXT k
380
390    FOR i=1 TO n/p
400       LET f(i)=b(n/p-i+1)
410       LET f(n/p+i)=c(n/p-i+1)
420       LET f(2*n/p+i)=d(n/p-i+1)
430       LET f(3*n/p+i)=e(n/p-i+1)
440    NEXT i
450
460    FOR i=1 TO n
470       LET a(i)=f(i)
480       PRINT ;q;"回";
490       PRINT USING "####":a(i);
500       PRINT
510    NEXT i
520
530 NEXT q
540 END
550

!3山でのシャッフル調査
100 OPTION BASE 1
110 INPUT  PROMPT "カードの枚数は?":n
120 INPUT  PROMPT "山の数は?:3を入力しておいて下さい。":p
130 INPUT  PROMPT "シャッフル回数?":t
140
150 DIM a(n)
160 DIM b(n)
170 DIM c(n)
180 DIM d(n)
190!DIM e(n)
200 DIM f(n)
210
220 FOR i=1 TO n
230    LET a(i)=i
240 NEXT i
250
260 FOR q=1 TO t
270    FOR k=1 TO INT(n/p)
280       LET b(k)=a(p*(k-1)+1)
290       LET c(k)=a(p*(k-1)+2)
300       LET d(k)=a(p*(k-1)+3)
310       !    LET e(k)=a(p*(k-1)+4)
320       PRINT USING "####":b(k);
330       PRINT USING "####":c(k);
340       PRINT USING "####":d(k);
350       !   PRINT USING "####":e(k);
360       PRINT
370    NEXT k
380
390    FOR i=1 TO n/p
400       LET f(i)=b(n/p-i+1)
410       LET f(n/p+i)=c(n/p-i+1)
420       LET f(2*n/p+i)=d(n/p-i+1)
430       !  LET f(3*n/p+i)=e(n/p-i+1)
440    NEXT i
450
460    FOR i=1 TO n
470       LET a(i)=f(i)
480       PRINT ;q;"回";
490       PRINT USING "####":a(i);
500       PRINT
510    NEXT i
520
530 NEXT q
540 END
550

カードマジックをやる上では、これ位が妥当であろう。

こうやって調べましたら次の様な結果を得ました。
             <3山でのシャッフル>
トランプ枚数     正順復元回数         逆順復元回数
     6                3
      9                4                   2
      12               6                   3
     15               4
     18               9
      21              10                   5
      24              20                  10
     27               3
     30              15
      33              16                   8
     36               9
     39               4
     42              21
      45              22                  11
     48              21
     51               6


              <4山でのシャッフル>
トランプ枚数      正順復元回数       逆順復元回数
      8                6                  3
     12               3
      16               4                  2
      20               6                  3
     24               5
     28               7
      32              10                  5
     36               9
     40               5
     44               6
     48              21
     52              13


これを眺めると以外にも混ぜているように見せかけて、元に戻すことが起こる
現象をつくることが可能であることがわかりました。
27枚での3山か、20枚での4山あたりが使えそうです。
 

Re: あるシャッフル方法の規則性

 投稿者:山中和義  投稿日:2008年11月24日(月)17時07分13秒
  > No.111[元記事へ]

GAIさんへのお返事です。

> これを眺めると以外にも混ぜているように見せかけて、元に戻すことが起こる
> 現象をつくることが可能であることがわかりました。


逆置換で元に戻すことを考える。

n枚p山のとき、n=k*pならn枚k山に分配・収集が考えられる。

たとえば
18枚3山の場合、各山6枚ずつ
 16,13,10,7,4,1 !山1 ※上から順に
 17,14,11,8,5,2 !山2
 18,15,12,9,6,3 !山3
となる置換になる。(出題の参考例のシャッフル)
これに対して、18枚6山、各山3枚ずつ
 6,12,18 !山1
 5,11,17 !山2
 4,10,16 !山3
 3, 9,15 !山4
 2, 8,14 !山5
 1, 7,13 !山6
となる逆置換である。

この置換は、上記の置換の後に適用すると計2回で元に戻る。
カード操作は、ほぼ同じ操作で実現できる。「カードを下から順に」とか、、、


。。。と言う具合に、私も少し考えてみました。
また、逆順のときに1回で逆順させるシャッフルを行う(途中で枚数を数える振りをして、1山にカードを置いていくなど)
などの組合せで、回数とかを減らすことができますね。
 

戻る