ねずみ取りゲーム、The Mousetrap

 投稿者:山中和義  投稿日:2014年 6月23日(月)13時19分8秒
  問題
トランプのカード4枚で1つの束をつくる。それぞれに、1,2,3,4の数字が記入されている。
カードの並びは、4!=24通りである。
「1」,「2」,「3」,「4」と数えながら、束の一番上から順にカードを確認する。
このとき、
 数字が一致する場合
 ・そのカードをテーブルの上に置く。2枚目以降は右隣りに置く。
 ・次に数える「数」は、「1」から始める。
 そうでない場合
 ・そのカードを束の一番下に移動させる。

次の場合、作業は終了する。
 ・すべてのカードがテーブルに並ぶ
 または
 ・「4」と数えたとき、数字が一致していない

例 束の並びが上から1,2,4,3の場合
 「数」  束(左側が上とする)           テーブル
  1     ①  2  4  3                     1
  1         2  4  3
  2            4  3  2
  3              ③  2  4               1  3
  1                  2  4
  2                     4  2
  3                        2  4
  4                          ④  2      1  3  4
  1                              2
  2                             ②      1  3  4  2
 なので、すべてテーブルに並ぶ。

すべてのカードがテーブルに並ぶものを見つけよ。


考察
 作業
  以下に注意しながら、
   表
    1 2 4 3
   --------
   ①②③④
   ⑤⑥ …
    :
    :
  に、1から4までの数字を順に記入していく。

 (1) 数字が一致する場合
  ・次に記入する数字は、1から始める。
  ・その列には、次の行からは数字を記入しない。

 (2) 次の場合は、作業を終了する。
  ・すべての列で数字が一致したとき
  ・4を記入したとき、一致していないとき


  1 2 4 3
 --------
 ①12③
 -12-
 -3④-
 -1--
 -②--
なので、1,3,4,2の順にすべてテーブルに並ぶ。
(終り)




PUBLIC NUMERIC C !場合の数
LET C=0
LET N=4 !枚数
DIM A(N) !並び n!通り
FOR i=1 TO N !最初の並び 1,2,3,…,n
   LET A(i)=i
NEXT i
CALL perm(A,1)
END

EXTERNAL SUB perm(a(),n) !1からnまでの順列を辞書式順序で生成する
LET m=UBOUND(a)
IF n=m THEN
!!!MAT PRINT a; !debug
   CALL stub(m,a)
ELSE
   FOR i=n TO m
      LET t=a(i)
      FOR j=i-1 TO n STEP -1
         LET a(j+1)=a(j)
      NEXT j
      LET a(n)=t
      CALL perm(a,n+1)
      LET t=a(n)
      FOR j=n TO i-1
         LET a(j)=a(j+1)
      NEXT j
      LET a(i)=t
   NEXT i
END IF
END SUB

EXTERNAL SUB stub(N,A()) !シミュレーション
DIM B(N),Q(N)
MAT B=A !copy it
LET M=N
LET P=0
LET K=0
DO WHILE K<N !1からnまで
   DO !束の一番上
      LET P=P+1 !p=[1,N]
      IF P>N THEN LET P=1
   LOOP UNTIL B(P)>0
   LET K=K+1
   IF B(P)=K THEN !一致するカード
      LET Q(N-M+1)=K !場の並び
      LET B(P)=-1 !取り除く
      LET M=M-1
      IF M=0 THEN !カードがすべてなくなったなら
         LET C=C+1
         PRINT "No.";C
         MAT PRINT A; !元の束(左側が上とする)
         MAT PRINT Q; !場の並び
         PRINT
         EXIT DO
      END IF
      LET K=0
   END IF
LOOP
END SUB


実行結果

No. 1
1  2  4  3

1  3  4  2


No. 2
1  4  2  3

1  2  3  4


No. 3
1  4  3  2

1  4  2  3


No. 4
2  1  3  4

3  2  1  4


No. 5
2  4  3  1

3  1  4  2


No. 6
4  2  1  3

2  1  3  4



●連続性
テーブルに並んだものを、
 1番目のカードは束の一番上、
 2番目のカードは束の上から2番目、
  :
 4番目のカードは束の一番下
となるように束にして、
同じ作業を続けると、再びすべてのカードがテーブルに並ぶ。
 束              テーブル
  1  4  3  2  →  1  4  2  3
  1  4  2  3  →  1  2  3  4
なので、
  1  4  3  2  →  1  4  2  3  →  1  2  3  4

その他に、
  4  2  1  3  →  2  1  3  4  →  3  2  1  4


●任意の並びを生成する
テーブルの並びを、1,3,4,2にする場合
 ①
 1,2,③
 1,2,3,④
 1,②
と数字を埋めていけばよい。
したがって、
 ①12③
 -12-
 -3④-
 -1--
 -②--
なので、束の並びは1,2,4,3とすればよい。

テーブルの並びを、1,3,2,4にする場合
 ①
 1,2,③
 1,②
 1,2,3,④
なので、
 ①12③
 -1②-
と埋めていくが、3番目の数は、③を埋めるときに2以外となる。
だが、②を埋めるとき、2になるので矛盾する。
よって、この並びは存在しない。
すなわち、同じ列で、埋める数字(丸数字)と同じ数字がないことに注意する。

 

Re: ねずみ取りゲーム、The Mousetrap

 投稿者:GAI  投稿日:2014年 6月24日(火)10時54分52秒
  山中和義さんへのお返事です。


実は私的数学塾で問うていた問題なんですが
<ケース4>(難問です)
1~13までの数字の場合、成功してテーブルに積んだカードで再びチャレンジすること4回(連続5回成功ということ。)すべて成功に繋がるという最初のシャッフル状態がただ一通り存在する。それはどんな配列なのか?

についてなんですが、サイトの関連する文献にて ”ほう!一個あるんだ。”
<参考>
http://www.dmmm.uniroma1.it/~alberto.bersani/mousetrap.html
(Reformed permutations in Mousetrap and its generalizationsに詳しい。)
という感慨だけで具体的にどんな配列であればいいのかが情報がなく、しかし調査しようにもその方法も作れず、でも知りたくて仕様がありません。
どうかこの配列を探し出して下さい。
 

Re: ねずみ取りゲーム、The Mousetrap

 投稿者:山中和義  投稿日:2014年 6月25日(水)10時10分10秒
  > No.3403[元記事へ]

GAIさんへのお返事です。

> どうかこの配列を探し出して下さい。

紹介された
数列のサイト や 添付された文書
 7ページ 表6
より、計4回では!?


n=13は困難(n=12が4時間なので、3日程度が予想される)のため、
DATA文を切り替えて、計13回実行します。
分担すると負担が軽減されるので、1,2,3,…を確認してください。
5,6,7にはありません。私は、8,9,…と確認してみます。


LET t0=TIME
DATA 1,2,3,4,5,6,7,8,9,10,11,12,13
!!DATA 2,1,3,4,5,6,7,8,9,10,11,12,13
!!DATA 3,1,2,4,5,6,7,8,9,10,11,12,13
!!DATA 4,1,2,3,5,6,7,8,9,10,11,12,13
!!DATA 5,1,2,3,4,6,7,8,9,10,11,12,13 !済み
!!DATA 6,1,2,3,4,5,7,8,9,10,11,12,13 !済み
!!DATA 7,1,2,3,4,5,6,8,9,10,11,12,13 !済み
!!DATA 8,1,2,3,4,5,6,7,9,10,11,12,13
!!DATA 9,1,2,3,4,5,6,7,8,10,11,12,13
!!DATA 10,1,2,3,4,5,6,7,8,9,11,12,13
!!DATA 11,1,2,3,4,5,6,7,8,9,10,12,13
!!DATA 12,1,2,3,4,5,6,7,8,9,10,11,13
!!DATA 13,1,2,3,4,5,6,7,8,9,10,11,12
DIM A(13)
MAT READ A
PUBLIC NUMERIC C !場合の数
LET C=0
CALL perm(A,2) !※先頭を固定する
PRINT C; "通り"
PRINT TIME-t0
END

EXTERNAL SUB perm(a(),n) !1からnまでの順列を生成する(辞書式でない)
LET m=UBOUND(a)
IF n=m THEN !すべて並んだなら
!!!MAT PRINT a; !debug
   LET X=0
   CALL stub2(1,m,a, X)
   IF X-1=4 THEN !回数 ※ ←←←←←←←←←←
      LET C=C+1
      PRINT "No.";C
      MAT PRINT A; !束の並び(左側が上とする)
   END IF
ELSE
   FOR i=n TO m !箇所を設定する
      LET t=a(n) !a[n]とa[i]を入れ替える
      LET a(n)=a(i)
      LET a(i)=t
      CALL perm(a,n+1) !次へ
      LET t=a(n) !元に戻す
      LET a(n)=a(i)
      LET a(i)=t
   NEXT i
END IF
END SUB

EXTERNAL SUB stub2(L,N,A(), X) !シミュレーション
DIM B(N),Q(N)
MAT B=A !copy it
LET M=N
LET P=0
LET K=0
DO WHILE K<N !1からnまで数える
   DO !束の一番上
      LET P=P+1 !p=[1,N]
      IF P>N THEN LET P=1
   LOOP UNTIL B(P)>0
   LET K=K+1
   IF B(P)=K THEN !一致するカード
      LET Q(N-M+1)=K !場の並び
      LET B(P)=-1 !取り除く
      LET M=M-1
      IF M=0 THEN !カードがすべてなくなったなら
         CALL stub2(L+1,N,Q, X) !連続で可能かどうか
         EXIT SUB
      END IF
      LET K=0
   END IF
LOOP
LET X=L !L回目がNG
END SUB



n=11までなら、n!通りを直接処理しても現実的なので、次のようになります。


LET N=11 !枚数 ※ ←←←←←←←←←←
DIM A(N) !並び n!通り
FOR i=1 TO N !最初の並び 1,2,3,…,n
   LET A(i)=i
NEXT i
PUBLIC NUMERIC C !場合の数
LET C=0
CALL perm(A,1)
PRINT C; "通り"
END

 :以下、同じなので省略する


 

Re: ねずみ取りゲーム、The Mousetrap

 投稿者:山中和義  投稿日:2014年 6月25日(水)18時52分33秒
  > No.3404[元記事へ]

GAIさんへのお返事です。

> 分担すると負担が軽減されるので、1,2,3,…を確認してください。
> 5,6,7にはありません。私は、8,9,…と確認してみます。

5,6,7,8,9にはありません。

続けて、10,11,…と確認してみます。
 

Re: ねずみ取りゲーム、The Mousetrap

 投稿者:GAI  投稿日:2014年 6月25日(水)19時21分13秒
  > No.3405[元記事へ]

山中和義さんへのお返事です。


> 5,6,7,8,9にはありません。
>
> 続けて、10,11,…と確認してみます。
>

1を動かしていますが、なかなか終わりません。(3時間位)
一つ当たりどれ位の時間で終わるものですか?
 

戻る