◆広島県 清川 育男 さんからの解答
【おまけ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通りであることを確認出来ました。◆東京都 藤本 さんからの解答
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)が逆になっている.
|
|
|
|
|
|
◆ 問題へもどる
◆ 今週の問題へ