◆海外 ブリタ さんからの解答
【問題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) が確定すれば、予想が成立する可能性は高いと思われます。
予想はほぼ間違いなさそうです。
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のとき、 | n2+1 2 |
n=4mのとき、 | n2−n 2 |
n=4m+1のとき、 | n2+1 2 |
n=4m+2のとき、 | n2+n 2 |
n | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
手数 | 3 | 5 | 6 | 13 | 21 | 25 | 28 |
n | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
手数 | 41 | 55 | 61 | 66 | 85 | 105 | 113 |
実際、待ち行列のn番とn+1番を用いて任意の追い越しを行うことが可能なので、それは可能です。
次に文字と番号を合わせる必要がありますが、文字の周期nとマス番号の周期n+1は互いに素ですから、何回か環状シフトをまわせば、合わせる(Zを0番にする)ことが可能です。
即ち任意のnで可能です。
【最小の限界】
下図に示すように、円環状に配置されている背番号の順を逆にするには、背番号をほぼ半分ずつの2グループにわけるのが最も手数が少ないと言えます。
一周につき各グループ1個ずつ2個交換できるので、
少なくとも[ | n−1 2 | ]周は必要です。 |
即ち、どんなに少なくても
[ | n−1 2 | ]*(n+1)+1 回は手数が必要です。 |
[ | n−1 2 | ]*(n+1)+1 |
=( | n 2 | −1)(n+1)+1 |
= | n(n−1) 2 | が最小です。 |
また | n(n−1) 2 | ≡2m mod n です。 |
[ | n−1 2 | ]*(n+1)+1 |
= | (n−1)(n+1) 2 | +1 |
= | n2+1 2 | が最小です。 |
また | n2+1 2 | ≡2m mod n です。 |
[ | n−1 2 | ]*(n+1)+1 |
= | (n−1)(n+1) 2 | +1 |
= | n2+1 2 | が最小です。 |
また | n2+1 2 | ≡2m+1 mod n です。 |
[ | n−1 2 | ]*(n+1)+1 |
=( | n 2 | −1)(n+1)+1 |
= | n(n−1) 2 | が最小です。 |
また | n(n−1) 2 | ≡2m+1 mod n です。 |
従って、手数は (2m+1)×(n+1)= | n2+n 2 | です。 |
最小性の証明が残念ながらできませんでした。なにか別のアプローチが必要でした。
◆ 問題へもどる
◆ 今週の問題へ