切符くん for FX-602P/603P

Ver. 1.05 (2000/10/27)

(C) 2000, K. Miyahara


※本プログラムはFreewareです。動作に責任は持ちません。(^^;
※本バージョンはまだ未完成のベータバージョンです。(^^;

概要

 特定の4つの数字と+、−、×、÷、()を使って10を作りなさい・・・誰もが聞いたことのあるパズルですが、一つ解を見つけた後、「他にも解はあるのかな?」と気になってしまう人も多いと思います(私だけ?)。そこで、そういった疑問をすっきり解決してくれるプログラムを作ってみました。切符の番号を使って考える人が多いようなので「切符くん」と名前がついていますが、任意の2駅間の最短ルートを求めたり、運賃を計算してくれる機能はありません(笑)。

ルール

使い方

 プログラムを入力してP0を押します。すると入力待ちになるので、数字を一つ入力してEXEを押してください。順に4つの数字を全部入力し終わると、下記のように表示され(6,8,8,9と入力した場合)、後はひたすら解が表示されるのを待つだけです。(^^;

6,8,8,9→10

 解が一つ求まると、例えば次のように表示されます。

((6■8)×9)■8

 ここで表示される記号の意味は次の通りです。

記号の意味
記号 意味
xyxy
xyxy
x ×yxy
x ÷yxy
xyyx

※■と←にご注意ください。特に■の方は−(マイナス)を使った表現に直す場合、2つの数字の大小関係に合わせて適当に項を入れ替える必要があります。

 結局、上の実行例の出力は(8−6)×9−8という式を表していることになり、確かにこの結果は10になります。(^^) さらに、ここでEXEを押すと、続けて次の解を探索し始めます。この例では、次の解が見つかるはずです。

(6×9)■(8×8)

 この式は、8×8−6×9という式に対応し、確かに結果は10になります。この場合のように、式に余分なカッコがつく場合がありますが、無視してください。

 さらにEXEを押すと計算を継続し、しばらくして次のように表示され、プログラムが終了します。

          2

 これは、独立な解が二つあったことを示しています。

 いくつか実行例を示します。出力は直感的にわかりやすい形になっているとは限りませんが、プログラムの都合によるものですのでご了承ください。慣れれば頭の中で整形するのはそれほど難しくないと思います。

実行例
4つの数字 切符くんの出力結果 出力結果を整形したもの 独立な解の数
6,8,8,9((6■8)×9)■8
(6×9)■(8×8)
(8−6)×9−8=10
8×8−6×9=10
2
1,9,9,1((1÷9)+1)×9(1÷9+1)×9=101
3,4,7,8((7÷4)■3)×8(3−7÷4)×8=101
6,6,9,9(6←9)←(6+9)(6+9)×6÷9=101
1,2,3,4((1÷2)■3)×4
((1÷2)←3)+4
(1×2)■(3×4)
((1×2)×3)+4
(1+2)+(3+4)
(1■3)+(2×4)
((1■3)×4)+2
((3÷2)+1)×4
(1×4)+(2×3)
(3−1÷2)×4=10
3×2÷1+4=10
3×4−1×2=10
1×2×3+4=10
1+2+3+4=10
2×4+3−1=10
(3−1)×4+2=10
(3÷2+1)×4=10
1×4+2×3=10
9

アルゴリズム

 まだ下記に示すバグがあり、完全なものとはいえないので、後日改めて書きます。すぐ知りたいという人はプログラムソースを読んでください(笑)。

バグ

 同じ解と見なすかどうかの判定が不十分なため、同じような解が異なった形式で2回以上表示されてしまう場合があります(実行例の1,2,3,4の2番目と4番目の解を参照)。ただ、どこまでを同じ解と見なすかが難しいですが…。とりあえず、x ×1とx ÷1は同じもの、x +0とx −0も同じものとして扱うようにしています。

 また、解を見落とすことはないと思いますが、もしバグ等ありましたら、こちらまでお知らせください。

プログラムリスト

※入力時の注意
プログラム ステップ数 内容
P9 34 Min05 IND GOTO5 LBL8 ";+" GOTO9 LBL6 ";■" GOTO9 LBL4 ";×" GOTO9 LBL2 ";÷" GOTO9 LBL0 ";←" LBL9
P8 54 1 M+18 MinF MR13 x=F "(( AR01 " x=0 "( AR01 " MR07 GSBP9 "; AR02 )" MR09 GSBP9 MR13 x=F "; AR03 )" x=0 ";( AR03 " MR08 GSBP9 "; AR04 " MR13 x=0 ";)" ";" HLT
P7 60 Min05 MR10 x>=0 MR11 x>=0 IND GOTO5 LBL8 M+10 MR10 GOTO9 LBL6 x=0 GOTO5 MR10 x=0 GOTO5 M-11 MR11 ABS GOTO9 LBL4 × MR10 GOTO9 LBL2 - x^2 = x=0 GOTO5 MR10 x=0 GOTO5 ÷ MR11 GOTO9 LBL0 - MR10 = × ( MR10 - x^2 = x=0 GOTO5 MR11 ÷ MR10 GOTO9 LBL5 1 +/- LBL9 = Min10
P3 54 1 Min05 MinF IND GOTO8 GOTO0 LBL8 MR04 x=0 GOTO9 GOTO0 LBL4 MR04 x=F GOTO9 LBL0 MR09 M-05 IND GOTO5 GOTO1 LBL7 MR03 x=0 GOTO9 GOTO1 LBL3 MR03 x=F GOTO9 LBL1 MR01 Min10 MR02 Min11 MR07 GSBP7 MR03 Min11 MR09 GSBP7 MR04 Min11 MR08 GSBP7 - MR19 = FIX5 x=0 GSBP8 LBL9
P2 15 ÷ MR00 X←→Y = FRAC × 5 = INT × 2 - 3 =
P1 174 MR14 - MR01 × MR03 - MR02 × MR04 = Min15 MR14 - MR01 × MR04 - MR02 × MR03 = x=0 Min15 AC Min00 LBL0 MR00 MinF 125 x=F GOTO9 GSBP2 Min07 25 GSBP2 Min08 5 GSBP2 Min09 MinF 1 M+00 x=F x=0 GOTO2 MR07 x>=0 MR08 x>=0 x=0 GOTO0 LBL2 .5 MinF MR15 x>=F GOTO7 MR07 MinF MR08 x>=F x=0 GOTO0 LBL7 2 M-07 M-08 M-09 MR07 × MR09 = Min16 x~ Min17 5 M+07 M+08 M+09 MR16 x>=0 MR17 x>=0 MR1F x=0 GOTO0 MR01 Min10 MR02 Min11 MR07 GSBP7 Min12 MR03 Min10 MR04 Min11 MR08 GSBP7 Min11 MR12 Min10 MR09 GSBP7 - MR19 = FIX5 Min13 x=0 GSBP8 x=0 GOTO0 1 Min13 MR17 x>=0 GOTO3 MR16 x>=0 MR1F x>=0 GOTO3 GSBP3 MR03 MinF x←→M04 Min03 x=F GOTO3 GSBP3 MR03 x←→M04 Min03 LBL3 MR16 x>=0 GOTO0 MR17 x>=0 MR1F x>=0 GOTO0 MR07 x←→M08 Min07 MR01 x←→M03 x←→M02 x←→M04 Min01 GSBP3 MR03 MinF x←→M04 Min03 x=F GOTO4 GSBP3 LBL4 MR01 x←→M04 Min01 MR03 x←→M02 Min03 GOTO0 LBL9
P0 66 MAC 4 Min00 M-1F LBL0 1 M+05 MR05 HLT IND Min05 XD DSZ GOTO0 MR07 ÷ 2 = Min14 10 Min19 " AR01 , AR02 , AR03 , AR04 → AR19 " GSBP1 AC Min1F MR04 MinF MR01 x=F GOTO1 MR02 MinF x←→M03 Min02 x=F GOTO1 GSBP1 LBL1 MR03 MinF MR01 x=F GOTO2 MR04 x=F GOTO2 MinF x←→M02 Min04 x=F GOTO2 GSBP1 LBL2 MR18
total 457 steps



counter

[ HomePage | FX-602Pのページ ]

PED00725@nifty.ne.jp, ey5k-myhr@asahi-net.or.jp
Last modified 2000/10/27