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


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

【おまけ1・2】

  1 (9*8-7)*(6*5+4/(3+2))-1
  2 9*8*(7*6-5)/4*3+2+1        (*)
  3 9*8*(7*6-5)/(4/3)+2+1      (*)
  4 9*8*(7+6*5)/4*3+2+1        (*)
  5 9*8*(7+6*5)/(4/3)+2+1      (*)
  6 9*((8+7)*(6+5+4)-3)+2+1    (*)
  7 (9+8*7)*(6*5+4/(3+2))-1
  8 (9+8*7*6)*(5+4/(3+2))*1
  9 (9+8*7*6)*(5+4/(3+2))/1
 10 (9+8*7*6)*(5+4/(3*2-1))
 11 9*((8*7*6-5+4)/3*2-1)
 12 9*((8*7*6-5+4)/(3/2)-1)
 13 9*((8*7*6-(5-4))/3*2-1)
 14 9*((8*7*6-(5-4))/(3/2)-1)
 15 9*((8*(7+6)+5*4/3)*2+1)
 16 (9*(8+7*6*5+4)+3)*(2-1)
 17 (9*(8+7*6*5+4)+3)/(2-1)
 18 9*(8+7*6*5+4/3+2+1)
 19 9+8*(7*6*(5+4-3)-2-1)
 20 9+8*(7*6*(5+4-3)-(2+1))
 21 9*(8*((7/6+5)*4+3)+2-1)
 22 9*(8*(7/6+(5+4)*3)-2-1)
 23 9*(8*(7/6+(5+4)*3)-(2+1))
 24 9*((8+7*(6+5)*4/3)*2+1)
 25 9-(8*((7-(6+5)*4*3)*2+1))
 26 (9+8*(7+6*5*4-3))*2-1      (*)
 27 9+8*((7+6*5*4-3)*2+1)
 28 -9+(8+7)*((6+5)*4*3+2)*1
 29 -9+(8+7)*((6+5)*4*3+2)/1
 30 -9-(8+7)*(6-5*4*(3*2+1))
 31 (-9+(8*7*6-5+4)*3*2)*1
 32 (-9+(8*7*6-5+4)*3*2)/1
 33 -9+(8*7*6-5+4)*(3+2+1)
 34 -9+(8*7*6-(5-4))*3*2*1     (*)
 35 (-9+(8*7*6-(5-4))*3*2)/1
 36 -9+(8*7*6-(5-4))*(3+2+1)
 37 (-9+8*(7+6)+5)*4*(3+2)+1

(仮称)十進BASIC-version 4.63(最新)でプログラムしました。
従来のものでは、仮想メモリに制限があり、スタックのオーバーフローのエラーになるのであきらめていました。
バックトラックのBASIC言語によるプログラム例として送ります。

 REM 今週の問題−第123回の解答プログラム
 OPTION BASE 0
 DIM A(13)
 DIM B(35,4)
 DIM T(35)
 DIM C(35)
 DIM E(35)
 DIM M(35)
 REM 最小手順の検索
 FOR UTIKIRI=35 TO 10 STEP -1
    PRINT UTIKIRI;"手" 
    LET  E(0)=999
    REM 初期設定
    FOR I=1 TO 12
       LET  A(I)=I
    NEXT I
    LET  A(12)=1
    LET  A(1)=12
    LET  A(13)=0
    LET  D=0
    REM START
    REM D手目
 10    LET  D=D+1
       REM 打ち切り条件
       IF D=UTIKIRI THEN
          GOTO 30
       END IF
       GOSUB 100
 20    LET  C(D)=C(D)+1
       IF C(D)>T(D) THEN
          IF D=1 THEN
             LET  C(D)=0
             GOTO 50
          ELSE
             LET  C(D)=0
             LET  D=D-1
             GOSUB 300
             GOTO 20  
          END IF
       END IF
       LET  E(D)=A(B(D,C(D)))
       REM 繰り返しの排除
       IF E(D)=E(D-1) THEN
          GOTO 20
       END IF
       GOSUB 200
       GOTO 10
 30    REM 終局
       GOSUB 100   
 40    LET  C(D)=C(D)+1
       IF C(D)>T(D) THEN
          LET  C(D)=0
          LET  D=D-1
          GOSUB 300
          GOTO 20
       END IF
       LET  E(D)=A(B(D,C(D)))
       IF E(D)=E(D-1) THEN
          GOTO 40
       END IF
       GOSUB 200
       REM 出来上がりのチェック
       GOSUB 400
       IF F=0 THEN
          FOR I=1 TO D
             PRINT USING "###":E(I);
             IF MOD( I , 10) =0 THEN
                PRINT
             END IF
          NEXT I
          PRINT
          PRINT
       END IF
       GOSUB 300
       GOTO 30
 50 NEXT UTIKIRI 
    STOP
 100 REM 移動可能箇所の検索
     IF A(13)=0 THEN
        LET  M(D)=13
        LET  T(D)=4
        LET  B(D,1)=12
        LET  B(D,2)=3
        LET  B(D,3)=6
        LET  B(D,4)=9
        RETURN
     ELSE
        REM 空白箇所の検索
        FOR I=1 TO 12
           IF A(I)=0 THEN
              LET  K=I
              EXIT FOR
           END IF
        NEXT I
        IF K=1 THEN
           LET  B(D,1)=12
           LET  B(D,2)=2          
           LET  T(D)=2
           LET  M(D)=1
           RETURN
        END IF
        IF K=12 THEN
           LET  B(D,1)=11
           LET  B(D,2)=1
           LET  B(D,3)=13
           LET  T(D)=3
           LET  M(D)=12
           RETURN
        END IF
        IF K=3 OR K=6 OR K=9  THEN
           LET  B(D,3)=13
           LET  B(D,1)=K-1
           LET  B(D,2)=K+1          
           LET  T(D)=3
           LET  M(D)=K
           RETURN
        END IF
        LET  B(D,1)=K-1
        LET  B(D,2)=K+1
        LET  T(D)=2
        LET  M(D)=K
     END IF
     RETURN
 200 REM 置く      
     SWAP A(M(D)),A(B(D,C(D)))
     RETURN
 300 REM 戻す 
     SWAP A(M(D)),A(B(D,C(D)))
     RETURN
 400 REM 出来上がり
     LET  F=0
     FOR I=1 TO 12
        IF A(I)<>I THEN
           LET  F=1
           EXIT FOR
        END IF
     NEXT I
     RETURN
     END


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

35手が最小手数で4通りであることを確認出来ました。
34手以下の解はありませんでした。


◆東京都 藤本 さんからの解答

35手

手順は以下の4通りを見つけました

L→K→J→I→O→C→B→
A→L→O→I→H→G→F→
E→D→C→O→L→A→B→
C→D→E→F→G→H→I→
J→K→L→A→B→C→O

L→K→J→I→H→G→F→
O→C→B→A→L→O→F→
E→D→C→O→L→A→B→
C→D→E→F→G→H→I→
J→K→L→A→B→C→O

C→B→A→L→K→J→I→
H→G→F→E→D→C→B→
A→L→O→C→D→E→F→
O→L→A→B→C→O→F→
G→H→I→J→K→L→O

C→B→A→L→K→J→I→
H→G→F→E→D→C→B→
A→L→O→C→D→E→F→
G→H→I→O→L→A→B→
C→O→I→J→K→L→O


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

【問題】

35手

L→K→J→I→O→C→B→
A→L→O→I→H→G→F→
E→D→C→O→L→A→B→
C→D→E→F→G→H→I→
J→K→L→A→B→C→O

【おまけ1】

● −9−(8+7)×(6−5×4×(3×2+1))
● −9+(8+7)×((6+5)×4×3+2)×1
● −9+(8×7×6−5+4)×3×2×1
● −9+(8×7×6−5+4)×(3+2+1)
● (−9+8×(7+6)+5)×4×(3+2)+1

【おまけ2】

(1)9×8×(7×6−5)/4×3+2+1
(2)9×8×(7+6×5)/4×3+2+1
(3)9×((8+7)×(6+5+4)−3)+2+1
(4)(9+8×(7+6×5×4−3))×2−1


◆千葉県 しまだきよこ さんからの解答

≪操作の手順≫

[1回目] C→B→A→L→K→J→I→H→G→F→E→D→
[2回目] C→B→A→L→O→
[3回目] C→D→E→F→O→
[4回目] L→A→B→C→O→
[5回目] F→G→H→I→J→K→L→O [35手]

[最初の図]
(12)と(1)が逆になっている.
11 12 1
10 2
9 : 3
8 4
7 6 5
[1回目]
(3)を中心に移動・右回転.
10 11 1
9 12
8 3 2
7  
6 5 4
[2回目]
続けて右回転し(3)を(L)に移動.
10 3 11
9 1
8 : 12
7 2
654

[3回目]
(12)を中心に移動・左回転.
10 3 11
9 1
8 12 2
7 4
6   5
[4回目]
(3)を中心に移動・左回転.
10 11 1
9 2
8 :3  
7 4
6125
[5回目]
(12)を中心に移動・左回転.
11 1
10 2
9 12 3
8 4
7 6 5


 ◆ 問題へもどる

 ◆ 今週の問題

数学の部屋へもどる