□□□ × 8□ −−−−− □□□□ □□□ −−−−− □□□□ |
3桁と2桁のかけ算の計算式で、□の中に数字を入れて数式を完成させよ、という問題だ。
こういうパズルを見ると、つい血が騒ぐ悪い性分で、すぐに手元にあったWindows CEマシンのカシオペアのスイッチを入れ、「エクセル」を起動。「int」関数を使ってシミュレーションしたら、案外簡単に答えが見つかった。
しかし、シミュレーションで見つけるのでは面白くないと、今度はサブノートPC「プロノート・ミニ」の電源を入れ、DOSに入っていたBASICでプログラムを組むことにする。
まず、各数字を変数に代入するところからスタートだ。
abc × 8d −−−−− efgh ←この行の数値を「t1」に ijk ←この行の数値を「t2」に −−−−− lmno ←この行の数値を「t3」に |
こうして作ったプログラムが以下のもの(プログラム中の日本語の注釈は、ここでつけたもの。英語版のQBASICを使ったので、元々は怪しい英語の注釈だった)。
CLS 0 '変数の定義 a = 0: b = 0: c = 0: d = 0: e = 0: d = 0: e = 0 f = 0: g = 0: h = 0: i = 0: j = 0: k = 0: l = 0 m = 0: n = 0: o = 0 'ループで変数に数値を代入 FOR x1 = 0 TO 9: FOR x2 = 0 TO 9: FOR x3 = 0 TO 9: FOR x4 = 0 TO 9 a = x1: b = x2: c = x3: d = x4 '各行への数値の代入 t1 = (a * 100 + b * 10 + c) * d t2 = (a * 100 + b * 10 + c) * 80 t3 = t1 + t2 '各変数に、INT命令で整数化した数値を代入。 e = INT(t1 / 1000) f = INT(t1 / 100) - (e * 10) g = INT(t1 / 10) - (e * 100 + f * 10) h = INT(t1) - (e * 1000 + f * 100 + g * 10) i = INT(t2 / 1000) j = INT(t2 / 100) - (i * 10) k = INT(t2 / 10) - (i * 100 + j * 10) l = INT(t3 / 1000) m = INT(t3 / 100) - (l * 10) n = INT(t3 / 10) - (l * 100 + m * 10) o = INT(t3) - (l * 1000 + m * 100 + n * 10) '条件絞り込み IF a = 0 GOTO nextx '「a>0」 IF a > 1 THEN END '「a>1」だと「t2」が桁上がりするのでスキップして終わり。 IF e = 0 GOTO nextx '「e>0」 IF i = 0 GOTO nextx '「i>0」 IF l = 0 GOTO nextx '「l>0」 IF t1 > 9999 GOTO nextx '「t1」は4桁まで。 IF t2 > 9999 GOTO nextx '「t2」は4桁まで。 IF t3 > 9999 GOTO nextx '「t3」も4桁まで。 PRINT "----" '条件にヒットすると、ここで各変数の数値を表示。 PRINT " a "; " b "; " c "; " 8 "; " d "; PRINT " e "; " f "; " g "; PRINT " h "; " i "; " j "; " k "; PRINT " l "; " m "; " n "; " o " PRINT a; b; c; " 8 "; d; e; f; g; h; i; j; k; l; m; n; o PRINT "----" INPUT "Hit Return", a$ IF a$ <> "" GOTO nextx nextx: '条件に該当しない数値は、「a, b, c, d」の数値だけ表示してループへ。 PRINT a; b; c; d NEXT x4: NEXT x3: NEXT x2: NEXT x1 END |