『今週の問題』第211回 解答


◆海外 ブリタ さんからの解答

【問題1】

n手まで進めた場合の数は、それぞれの手において選択肢が2つ(すなわち、2つの空き地のうち右を選ぶか左を選ぶか)しかないので、 2n通りになります。
上記の考えに基づき、最大13手目まで進めた場合(途中経過を含む)を全て検証する十進BASICプログラムは次の通りです。

DIM CH$(1 TO 5)
DIM P$(1 TO 7)
DIM TE(1 TO 13)

LET SAIDAI=13

LET CH$(1)="A"
LET CH$(2)="B"
LET CH$(3)="C"
LET CH$(4)="D"
LET CH$(5)="E"

SUB CHGCHR(X$,X)

   FOR I1=1 TO 7
      IF P$(I1)=X$ THEN LET  Y1=I1
       
      IF X=0 THEN
         IF P$(8-I1)="*" THEN LET  Z1=8-I1
      ELSE
         IF P$(I1)="*" THEN LET  Z1=I1
      END IF
   NEXT I1    
    
   LET P$(Y1)="*"
   LET P$(Z1)=X$
    
END SUB


LET N=0
LET NO=1
LET TETL=2^SAIDAI-1

FOR I=0 TO TETL

   LET K=I
   FOR J=1 TO SAIDAI
      LET TE(J)=MOD(K,2)
      LET K=(K-TE(J))/2
   NEXT J 
    
   LET TEME=0
   LET P$(1)="A"
   LET P$(2)="B"
   LET P$(3)="C"
   LET P$(4)="D"
   LET P$(5)="E"
   LET P$(6)="*"
   LET P$(7)="*"
        
   DO
    
      LET TEME=TEME+1
      LET CH=MOD(TEME-1,5)+1
      CALL CHGCHR(CH$(CH),TE(TEME))
       
      LET JUDGE=0
      IF TEME>=SAIDAI THEN LET  JUDGE=1
      LET  CHTL$=P$(1)&P$(2)&P$(3)&P$(4)&P$(5)&P$(6)&P$(7)
      IF CHTL$="EDCBA**" THEN LET  JUDGE=2
       
   LOOP UNTIL JUDGE>0 
    
   IF JUDGE=2 THEN
      PRINT NO;": ";TEME;"手: ";
      FOR M=1 TO TEME
         IF TE(M)=0 THEN PRINT "左 "; ELSE PRINT "右 ";
      NEXT M 
      PRINT
      LET NO=NO+1
   END IF
    
NEXT I 

END
この結果は次の通りです。
 1 :  13 手: 左 右 右 左 左 左 右 右 左 左 右 右 左 
 2 :  13 手: 右 右 右 左 左 左 右 右 左 左 右 右 左 
 3 :  13 手: 左 右 右 左 右 左 右 右 左 左 右 右 左 
 4 :  13 手: 右 右 右 左 右 左 右 右 左 左 右 右 左 
従って、最短の手数は13手となります。

【問題2】

十進BASICを走らせた結果、以下の通り最小手は21手、42通りです。

  1 :  21 手: 左 右 右 左 右 右 右 右 左 左 左 右 右 左 右 左 左 左 左 左 左 
  2 :  21 手: 右 右 右 左 右 右 右 右 左 左 左 右 右 左 右 左 左 左 左 左 左 
  3 :  21 手: 左 左 左 右 右 右 右 右 右 右 左 右 右 左 右 左 左 左 左 左 左 
  4 :  21 手: 右 左 左 右 右 右 右 右 右 右 左 右 右 左 右 左 左 左 左 左 左 
  5 :  21 手: 左 右 右 左 左 右 左 右 左 左 左 右 右 右 右 左 左 左 左 左 左 
  6 :  21 手: 右 右 右 左 左 右 左 右 左 左 左 右 右 右 右 左 左 左 左 左 左 
  7 :  21 手: 左 右 右 左 右 右 左 右 左 左 左 右 右 右 右 左 左 左 左 左 左 
  8 :  21 手: 右 右 右 左 右 右 左 右 左 左 左 右 右 右 右 左 左 左 左 左 左 
  9 :  21 手: 左 右 右 左 左 右 左 右 右 左 左 右 右 右 右 左 左 左 左 左 左 
 10 :  21 手: 右 右 右 左 左 右 左 右 右 左 左 右 右 右 右 左 左 左 左 左 左 
 11 :  21 手: 左 右 右 左 右 右 左 右 右 左 左 右 右 右 右 左 左 左 左 左 左 
 12 :  21 手: 右 右 右 左 右 右 左 右 右 左 左 右 右 右 右 左 左 左 左 左 左 
 13 :  21 手: 左 左 左 右 左 右 左 右 右 右 左 右 右 右 右 左 左 左 左 左 左 
 14 :  21 手: 右 左 左 右 左 右 左 右 右 右 左 右 右 右 右 左 左 左 左 左 左 
 15 :  21 手: 左 左 左 左 右 右 左 右 右 右 左 右 右 右 右 左 左 左 左 左 左 
 16 :  21 手: 右 左 左 左 右 右 左 右 右 右 左 右 右 右 右 左 左 左 左 左 左 
 17 :  21 手: 左 左 左 右 右 右 左 右 右 右 左 右 右 右 右 左 左 左 左 左 左 
 18 :  21 手: 右 左 左 右 右 右 左 右 右 右 左 右 右 右 右 左 左 左 左 左 左 
 19 :  21 手: 左 左 左 右 左 右 左 右 左 左 左 右 右 右 右 右 右 左 左 左 左 
 20 :  21 手: 右 左 左 右 左 右 左 右 左 左 左 右 右 右 右 右 右 左 左 左 左 
 21 :  21 手: 左 左 左 右 右 右 左 右 左 左 左 右 右 右 右 右 右 左 左 左 左 
 22 :  21 手: 右 左 左 右 右 右 左 右 左 左 左 右 右 右 右 右 右 左 左 左 左 
 23 :  21 手: 左 左 左 右 左 右 左 右 左 左 右 右 右 右 右 右 右 左 左 左 左 
 24 :  21 手: 右 左 左 右 左 右 左 右 左 左 右 右 右 右 右 右 右 左 左 左 左 
 25 :  21 手: 左 左 左 左 右 右 左 右 左 左 右 右 右 右 右 右 右 左 左 左 左 
 26 :  21 手: 右 左 左 左 右 右 左 右 左 左 右 右 右 右 右 右 右 左 左 左 左 
 27 :  21 手: 左 左 左 右 右 右 左 右 左 左 右 右 右 右 右 右 右 左 左 左 左 
 28 :  21 手: 右 左 左 右 右 右 左 右 左 左 右 右 右 右 右 右 右 左 左 左 左 
 29 :  21 手: 左 右 右 左 右 右 左 右 左 左 左 左 左 右 右 左 左 左 右 右 左 
 30 :  21 手: 右 右 右 左 右 右 左 右 左 左 左 左 左 右 右 左 左 左 右 右 左 
 31 :  21 手: 左 右 右 左 右 右 右 右 左 左 左 左 左 右 右 左 左 左 右 右 左 
 32 :  21 手: 右 右 右 左 右 右 右 右 左 左 左 左 左 右 右 左 左 左 右 右 左 
 33 :  21 手: 左 左 左 右 右 右 左 右 右 右 左 左 左 右 右 左 左 左 右 右 左 
 34 :  21 手: 右 左 左 右 右 右 左 右 右 右 左 左 左 右 右 左 左 左 右 右 左 
 35 :  21 手: 左 左 左 右 右 右 右 右 右 右 左 左 左 右 右 左 左 左 右 右 左 
 36 :  21 手: 右 左 左 右 右 右 右 右 右 右 左 左 左 右 右 左 左 左 右 右 左 
 37 :  21 手: 左 左 左 左 左 左 右 右 右 右 左 右 右 右 右 左 左 左 右 右 左 
 38 :  21 手: 右 左 左 左 左 左 右 右 右 右 左 右 右 右 右 左 左 左 右 右 左 
 39 :  21 手: 左 左 左 右 右 右 左 右 左 左 左 左 左 右 右 右 右 左 右 右 左 
 40 :  21 手: 右 左 左 右 右 右 左 右 左 左 左 左 左 右 右 右 右 左 右 右 左 
 41 :  21 手: 左 左 左 左 左 左 右 右 左 左 右 右 右 右 右 右 右 左 右 右 左 
 42 :  21 手: 右 左 左 左 左 左 右 右 左 左 右 右 右 右 右 右 右 左 右 右 左 

◆滋賀県 松尾 さんからの解答

【問題1】

以下のように動かします。
13手必要です。
(以下、途中経過はN手づつ進めた状態を示します。)

( 0)ABCDE**
( 5)DC*E*AB
(10)EDA**BC
(13)EDCBA**
【問題2】

以下のように動かします。21手必要です。

( 0) ABCDEF**
( 6) DC*EF*AB
(12) EDC**ABF
(18) FEDBA*C*
(21) FEDCBA**
【問題3】

N=15までやってみました。
これが最短手数かは分かりませんが、方法は、

(1) 1巡目、ABを右の空いているマス目に入れ、CDをABが動いた後のマス目に入れます。
2巡目に動かせるように、Aの左とCの右に空のマス目がくるようにします。

(2) 2巡目以降、Aを1個づつ左に、Cを1個づつ右に移動していきます。
Cの左側には文字が順に並ぶようにしておきます。

(3) AとCの間に空のマス目が無くなったら、A、B、Cの位置に注意しながら、右に動かして、完成します。

N=7
( 0) ABCDEFG**
( 7) DC*EFG*AB
(14) EDC*G*ABF
(21) FEDC*AB*G
(28) GFEDCB*A*
(29) GFEDCBA**

N=8
( 0) ABCDEFGH**
( 8) DC*EFGH*AB
(16) EDC*GH*ABF
(24) FEDC**ABHG
(32) GFEDBA*C*H
(40) HGFEDCB*A*
(41) HGFEDCBA**

N=9
( 0) ABCDEFGHI**
( 9) DC*EFGHI*AB
(18) EDC*GHI*ABF
(27) FEDC*I*ABHG
(36) GFEDC*AB*IH
(45) HGFEDCB*A*I
(54) IHGFEDCB*A*
(55) IHGFEDCBA**

N=10
( 0) ABCDEFGHIJ**
(10) DC*EFGHIJ*AB
(20) EDC*GHIJ*ABF
(30) FEDC*IJ*ABHG
(40) GFEDC**ABJIH
(50) HGFEDCAB**JI
(60) JIHGFEDCBA**

N=11
( 0) ABCDEFGHIJK**
(11) DC*EFGHIJK*AB
(22) EDC*GHIJK*ABF
(33) FEDC*IJK*ABHG
(44) GFEDC*K*ABJIH
(55) HGFEDC*AB*KJI
(66) IHGFEDCB*A*KJ
(77) KJIHGFEDCBA**

N=12
( 0) ABCDEFGHIJKL**
(12) DC*EFGHIJKL*AB
(24) EDC*GHIJKL*ABF
(36) FEDC*IJKL*ABHG
(48) GFEDC*KL*ABJIH
(60) HGFEDC**ABLKJI
(72) IHGFEDCAB**LKJ
(84) KJIHGFEDCBA**L
(96) LKJIHGFEDCBA**

N=13
(  0) ABCDEFGHIJKLM**
( 13) DC*EFGHIJKLM*AB
( 26) EDC*GHIJKLM*ABF
( 39) FEDC*IJKLM*ABHG
( 52) GFEDC*KLM*ABJIH
( 65) HGFEDC*M*ABLKJI
( 78) IHGFEDC*AB*MLKJ
( 91) JIHGFEDCB*A*MLK
(104) LKJIHGFEDCBA*M*
(117) MLKJIHGFEDCBA**

N=14
(  0) ABCDEFGHIJKLMN**
( 14) DC*EFGHIJKLMN*AB
( 28) EDC*GHIJKLMN*ABF
( 42) FEDC*IJKLMN*ABHG
( 56) GFEDC*KLMN*ABJIH
( 70) HGFEDC*MN*ABLKJI
( 84) IHGFEDC**ABNMLKJ
( 98) JIHGFEDCAB**NMLK
(112) LKJIHGFEDCBA**NM
(126) NMLKJIHGFEDCBA**

N=15
(  0) ABCDEFGHIJKLMNO**
( 15) DC*EFGHIJKLMNO*AB
( 30) EDC*GHIJKLMNO*ABF
( 45) FEDC*IJKLMNO*ABHG
( 60) GFEDC*KLMNO*ABJIH
( 75) HGFEDC*MNO*ABLKJI
( 90) IHGFEDC*O*ABNMLKJ
(105) JIHGFEDC*AB*ONMLK
(120) KJIHGFEDCB*A*ONML
(135) MLKJIHGFEDCBA**ON
(150) ONMLKJIHGFEDCBA**
N=15までしか確認してませんが、これ以上の個数でも、同じ手順で可能だと思われます。

手数ですが、N=10以上の場合で考えます。Cの位置に注目すると、

1) 2巡目以降、A,Bに出会うまでの回数を調べます。
1巡目を終えたとき、A,Cの間に N-2 文字の距離があり、1巡するごとに2個近づくので、出会うまでに
roundup((N-2)÷2) 巡 ( roundup は切り上げ )必要になります。
これを i とします。
出会ったとき、Cは右から2 + i の位置にあります。

2) その後、2個づつ右に移動します。
左から N-2 個の位置にくる巡数、
roundup(( (N-2)-(2+i) ) ÷2 ) 巡 で完成です。

3) 結局、必要な巡の数は、

最初の1巡 = 1
A、Bと出会うまで = roundup((N-2)÷2) = i
左から N-2 の位置にくるまで = roundup(( (N-2)-(2+i) )÷2)

の合計です。
これに文字の数=Nをかけた答が手数です。


◆広島県 清川 育男 さんからの解答

【問題1】

 13手
( 1)*BCDEA*
( 2)**CDEAB
( 3)*C*DEAB
( 4)DC**EAB
( 5)DCE**AB
( 6)DCEA**B
( 7)DCEA*B*
( 8)D*EA*BC
( 9)*DEA*BC
(10)ED*A*BC
(11)ED**ABC
(12)ED*BA*C
(13)EDCBA**

( 1)*BCDEA*
( 2)**CDEAB
( 3)*C*DEAB
( 4)DC**EAB
( 5)DC*E*AB
( 6)DCAE**B
( 7)DCAE*B*
( 8)D*AE*BC
( 9)*DAE*BC
(10)EDA**BC
(11)ED**ABC
(12)ED*BA*C
(13)EDCBA**

( 1)*BCDE*A
( 2)**CDEBA
( 3)*C*DEBA
( 4)DC**EBA
( 5)DCE**BA
( 6)DCEA*B*
( 7)DCEA**B
( 8)D*EA*CB
( 9)*DEA*CB
(10)ED*A*CB
(11)ED**ACB
(12)ED*BAC*
(13)EDCBA**

( 1)*BCDE*A
( 2)**CDEBA
( 3)*C*DEBA
( 4)DC**EBA
( 5)DC*E*BA
( 6)DCAE*B*
( 7)DCAE**B
( 8)D*AE*CB
( 9)*DAE*CB
(10)EDA**CB
(11)ED**ACB
(12)ED*BAC*
(13)EDCBA**
【問題2】

 21 手 
( 1)*BCDEFA*
( 2)B*CDEFA*
( 3)BC*DEFA*
( 4)BCD*EFA*
( 5)BCDE*FA*
( 6)BCDEF*A*
( 7)BCDEF**A
( 8)*CDEF*BA
( 9)C*DEF*BA
(10)CD*EF*BA
(11)CD**FEBA
(12)CD*F*EBA
(13)CD*FAEB*
(14)CD*FAE*B
(15)*D*FAECB
(16)**DFAECB
(17)*EDFA*CB
(18)FED*A*CB
(19)FED**ACB
(20)FED*BAC*
(21)FEDCBA**
42通り

【問題3】

 空白 2箇所

 3個  5手
 4個  6手
 5個 13手
 6個 21手
 7個 25手
 8個 28手

予想

1,1,1,2,3,3,3,4,5,5,5

2個  2*1+2/2=3 **
3個  3*1+(3+1)/2=5 **
4個  4*1+4/2=6 **
5個  5*2+(5+1)/2=13 **
6個  6*3+6/2=21 **
7個  7*3+(7+1)/2=25 **
8個  8*3+8/2=28 **
9個  9*4+(9+1)/2=41 *
10個  10*5+10/2=55


A(1)=0,A(2)=1,A(3)=1
A(n)=A(n-1)-A(n-2)+A(n-3)+1

B(n)=n*A(n)+ceiling(n/2) ,n≧2

 B(2)=3    *
 B(3)=5    *
 B(4)=6    *
 B(5)=13   *
 B(6)=21   *
 B(7)=25   *
 B(8)=28   *
 B(9)=41   *
 B(10)=55  ?
 B(11)=61  ?
 B(12)=66  ?
 B(13)=85  ?
B(10)-B(13) が確定すれば、予想が成立する可能性は高いと思われます。
また最後からのn手は1通りで、綺麗な規則性がみられます。


予想はほぼ間違いなさそうです。

9個
 41 手
 10  11  2  3  1  5  6  7  8  9  10  11  4  3  2  1  6  7  8  5  10  11  4  3  2  1  9  7  6  5    10  11  4  3  2  1  9  8  7  6  5

10個
 55 手
 11  12  2  3  1  4  6  7  8  9  5  11  12  2  3  1  10  6  7  8  9  5  11  12  4  3  2  1  10  7  8  6  5  11  12  4  3  2  1  10  9  8  7  6  11  5  4  3  2  1  10  9  8  7  6


◆愛知県 Y.M.Ojisan さんからの解答

【問題1】

最短は13回

( 1)*BCDE*A
( 2)**CDEBA
( 3)*C*DEBA
( 4)DC**EBA
( 5)DCE**BA
( 6)DCEA*B*
( 7)DCEA**B
( 8)D*EA*CB
( 9)*DEA*CB
(10)ED*A*CB
(11)ED**ACB
(12)ED*BAC*
(13)EDCBA**
 

【問題2】

可能であって 最短は21回

( 1)*BCDEFA*
( 2)B*CDEFA*
( 3)BC*DEFA*
( 4)BCD*EFA*
( 5)BCDE*FA*
( 6)BCDEF*A*
( 7)BCDEF**A
( 8)*CDEF*BA
( 9)**DEFCBA
(10)*D*EFCBA
(11)ED**FCBA
(12)ED*F*CBA
(13)ED*FACB*
(14)ED*FAC*B
(15)ED*FA*CB
(16)E*DFA*CB
(17)*EDFA*CB
(18)FED*A*CB
(19)FED**ACB
(20)FED*BAC*
(21)FEDCBA**
 

【問題3】

一般にN個の文字を並び替えることはできる。
最小性は証明できていないが、下記手数で並び替えが可能であり、これが最小値と予想される。

n=4m−1のとき、 +1
n=4mのとき、 −n
n=4m+1のとき、 +1
n=4m+2のとき、 +n


具体的値を一部下表に示す。

表1 PCによるしらみつぶしにより最小であることを確認した手数。
手数 13 21 25 28


表2 少なくとも可能な手数であって最小と予想する手数。
10 11 12 13 14 15
手数 41 55 61 66 85 105 113


【証明】

【視点の置き換え】

 まず、マスにAのところを0番としてn+1番まで順に背番号をつけます。
また別に、下図のような 2×(n+2)個の待ち行列のマス列を作ります。
なお、文字Y,Zは一般にn−1番目、n番目の文字の代用表記です。
また、空白も一つの文字とみなしΦで表記します。

 すると、一回の操作は、文字のほうのグループではA〜Zの環状シフト置換(長さn)であることがわかります(黒矢印)。
一方背番号の方は、待ち行列の  を通るか n+1 を通るかの2種類の長さn+1の環状シフト置換であることがわかります(黒+赤矢印 または 黒+赤矢印)。

 

  文字のグループは操作が限られており、かつ環状シフトなのでその順は不変です。
従って、順を逆転させるにはマス背番号の方を換えれるしかないことがわかります。

 実際、待ち行列のn番とn+1番を用いて任意の追い越しを行うことが可能なので、それは可能です。
次に文字と番号を合わせる必要がありますが、文字の周期nとマス番号の周期n+1は互いに素ですから、何回か環状シフトをまわせば、合わせる(Zを0番にする)ことが可能です。

即ち任意のnで可能です。

【最小の限界】

 下図に示すように、円環状に配置されている背番号の順を逆にするには、背番号をほぼ半分ずつの2グループにわけるのが最も手数が少ないと言えます。
 一周につき各グループ1個ずつ2個交換できるので、
少なくとも[ n−1
]周は必要です。

1周につき手数はn+1は必要であり、かつ交換を行うためにはΦを一度2個とも周回に出さなければならないため、最後に+1回が必要です。

即ち、どんなに少なくても
 [ n−1
]*(n+1)+1 回は手数が必要です。

そしてさらに文字Aと背番号n−1が同じ位置でなければなりません。


 

【手順】

以下nの4を法とする剰余で分類して手順を示します。

(1) n=4mの場合

この場合
 [ n−1
]*(n+1)+1
=(
−1)(n+1)+1
n(n−1)
 が最小です。

また  n(n−1)
≡2m  mod n  です。

したがって、この値で丁度文字Aと背番号n−1が最後に一致するには、2グループの境界が、中央のとことろに来る必要があります。

実際それは可能であって、

(1−1) 下図のように 
m+1個 m−1個 m+1個 m−1個 の4グループに分けます。
それぞれα、β、γ、δとよびます。
まず、m−1周を費やして、αとγの2グループのm個をそれぞれ逆順に並べ換ます。
また、δのm−1個を並びの先頭に逆順にして移動させます。



(1−2)次にさらにm−1周を費やして、δをαの後ろに入れ、βを逆順にしてαの前に移動させます。



(1−3)最後にほぼ1周して、αとガンマに残った1個ずつを移動させ完成させます。
このとき輪は丁度2mずれています。

   

以上全部で2m−1周であり最小の周回数です。


(2) n=4m−1の場合

この場合
 [ n−1
]*(n+1)+1
(n−1)(n+1)
+1
+1
 が最小です。

また  +1
≡2m  mod n です。

 従って、m個 m−1個 m+1個 m−1個 の4グループに分け、(1)とほとんど同じ手順で、(1−3)でのαの移動のみ行わなければ、丁度2mずれた位置で終了できます。
下図に(2−3)相当の図のみ示します。

   


(3) n=4m+1の場合

この場合 
 [ n−1
]*(n+1)+1
(n−1)(n+1)
+1
+1
 が最小です。

また  +1
≡2m+1  mod n です。


従って、m+1個 m−1個 m+1個 m個 の4グループに分け、(1)とほとんど同じ手順で、(1−3)の後にもう一周してγの最後の一個をδの前に移動すれば、丁度2m+1ずれた位置で終了できます。
下図に(3−4)相当の図のみ示します。




(4) n=4m+2の場合

この場合
 [ n−1
]*(n+1)+1
=(
−1)(n+1)+1
n(n−1)
 が最小です。

また  n(n−1)
≡2m+1  mod n です。

 しかし、最小のm周では、丁度2m+1ずらすことが偶奇性からできないようです(未証明)。
もう一周すれば、1だけずらせて合わせることが可能です。
 このとき、逆順化は完成しており、入れ替えは不要なので、Φを追い出すのは1個だけでよく、余分の手数はn+1ではなく、nで回すことが可能です。

従って、手数は (2m+1)×(n+1)= +n
 です。

ずれは、 2m+1のままでよいです。
以下手順を示します。

(4−1) 下図のように m+1個 m個 m+1個 m個 の4グループに分けます。

まず、m周を費やして、αとγの2グループのm+1個をそれぞれ逆順にならべ、δのm個を列の先頭に逆順にして移動させます。



(4−2)次にさらにm周を費やして δをαの後ろに入れ、βの2m番を残して逆順にしてαの前に移動させます。



(4−3) 最後にβの2m番を1周以上して、先頭に移動させて終了します。

 

 以上全部で2m+1周であり、最小の周回数+1です。
 

【感想】

最小性の証明が残念ながらできませんでした。なにか別のアプローチが必要でした。
 


 ◆ 問題へもどる

 ◆ 今週の問題

数学の部屋へもどる