原稿が終わったので、ビールを飲みながら、読売新聞日曜版の阿刀田高氏の推理エッセイに出ていた、もう1問の推理パズルに挑戦してみることにした。その問題は次のようなもの。それぞれの英字に数字を当てはめ、数式を成立させよ、という問題だ。
これもBASICのプログラムを書けばチョロイだろうと思って、作成したのが次のプログラム。
CLS 0
BEEP
s = 0: e = 0: n = 0: d = 0
m = 0: o = 0: r = 0:
y = 0
FOR s = 8 TO 9
FOR e = 0 TO 9
FOR n = 0 TO 9
FOR d = 0 TO 9
FOR o = 0 TO 9
FOR r = 0 TO 9
FOR y = 0 TO 9
m = 1
t1 = (s * 1000 + e * 100 + n * 10 + d)
t2 = (m * 1000 + o * 100 + r * 10 + e)
t3 = (m * 10000 + o * 1000 + n * 100 + e * 10 + y)
IF t1 < 1000 GOTO nextx
IF t2 < 1000 GOTO nextx
IF t3 <> t1 + t2 GOTO nextx
IF s = e GOTO nextx
IF s = n GOTO nextx
IF s = d GOTO nextx
IF s = m GOTO nextx
IF s = o GOTO nextx
IF s = r GOTO nextx
IF s = y GOTO nextx
IF e = s GOTO nextx
IF e = n GOTO nextx
IF e = d GOTO nextx
IF e = m GOTO nextx
IF e = o GOTO nextx
IF e = r GOTO nextx
IF e = y GOTO nextx
IF n = s GOTO nextx
IF n = e GOTO nextx
IF n = d GOTO nextx
IF n = m GOTO nextx
IF n = o GOTO nextx
IF n = r GOTO nextx
IF n = y GOTO nextx
IF d = s GOTO nextx
IF d = e GOTO nextx
IF d = n GOTO nextx
IF d = m GOTO nextx
IF d = o GOTO nextx
IF d = r GOTO nextx
IF d = y GOTO nextx
IF o = s GOTO nextx
IF o = e GOTO nextx
IF o = n GOTO nextx
IF o = d GOTO nextx
IF o = m GOTO nextx
IF o = r GOTO nextx
IF o = y GOTO nextx
IF r = s GOTO nextx
IF r = e GOTO nextx
IF r = n GOTO nextx
IF r = d GOTO nextx
IF r = m GOTO nextx
IF r = o GOTO nextx
IF r = y GOTO nextx
IF y = s GOTO nextx
IF y = e GOTO nextx
IF y = n GOTO nextx
IF y = d GOTO nextx
IF y = m GOTO nextx
IF y = o GOTO nextx
IF y = r GOTO nextx
BEEP: BEEP: BEEP
PRINT
PRINT " s="; s; " e="; e; " n="; n; " d="; d
PRINT " m="; m; " o="; o; " r="; r; " e="; e
PRINT "m="; m; " o="; o; " n="; n; " e="; e; " y="; y
INPUT "Hit Return:"; a$
IF a$ <> "" GOTO nextx
nextx:
PRINT s; e; n; d; "/"; m; o; r; e; "/"; m; o; n; e; y
NEXT y: NEXT r: NEXT o: NEXT d: NEXT n: NEXT e: NEXT s
END
|
このプログラムを実行させてみると、1時間経っても計算が終わらない。「FOR〜NEXT」のループが多すぎるせいだ(最初のバージョンは、すべての変数をループさせたため、このバージョンよりもはるかに時間がかかった。このバージョンでの計算時間は、486/75MHzのサブノートPCで2時間半ほど)。
あまりにも時間がかかるので、手作業で解読したら、10分ほどで解けてしまった。人間のほうがパソコンよりもよっぽど優秀ではないか。その解読作業の手順は以下の通り。解説役はホームズ博士、質問役はワトソン君である。
SEND
□□□□
+ MORE
□□□□
−−−−−−
MONEY
□□□□□
|
ワトソン(以下「ワ」)「こんな数式が解けるんですか? 暇な人もいるもんですね」
ホームズ(以下「ホ」)「数式と考えるから解くのがイヤになるんだよ。暗号パズルだと思えば楽しみながら解けばいいのだ」
ワ「でも、どこから手をつけていいのかわかりまへん」
ホ「真っ先に解けるのは“M”だね。足し算の場合、桁上がりする数字は1種類しかないだろ?」
ワ「あ、そうか。足し算は、10以上の場合に桁上がりするけど、桁上がりする数字は1しかないってわけか」
ホ「そのとおり。で、“M”に1を代入すると、次のようになるってわけだ」
SEND
□□□□
+ MORE
1□□□
−−−−−−
MONEY
1□□□□
|
ホ「で、1000の位の足し算が桁上がりするためには、“M=1”だから、“S=8 or 9”ってことになる」
ワ「“S=8”になるのは、100の位から桁上がりするときだけですね」
ホ「そういうこと。そして“S=8”(+桁上がり分の1)でも、“S=9”でも、“S+M=10”になるから、必然的に“O=0”ってことになるだろ」
ワ「ああ、なるほど」
SEND
□□□□
+ MORE
10□□
−−−−−−
MONEY
10□□□
|
ホ「次はSの値を求めてみよう。Sは8か9のどちらかだが……」
ワ「“S=8”の場合は、100の位から桁上がりしてくるってことですから、100の位は“E+O=10+N”ってわけか。でも“O(オー)=0”だから、10の位から桁上がりしてきたときしか、100の位の合計は桁上がりしないことになりますよね。つまり、”S=8”の場合、“E=9”ってことになりますよね」
ホ「でも、その場合、“N”の値は?」
ワ「“(1)+9+10=10”で、和の“10”の下一桁が“N”だから……あれ、“N=0”になってしまう」
ホ「そういうこと。0は、すでに“O(オー)”に使われているからね。てことは“S=8”ではないということになる」
ワ「つまり“S=9”というわけですね。となると、100の桁は、桁上がりしないってわけですね」
ホ「そうだね。これで“S”“M”“O”の3つの数字が解けたことになる」
ワ「残りは“E”“N”“D”“R”“Y”の5つか……」
SEND
9□□□
+ MORE
10□□
−−−−−−
MONEY
10□□□
|
ワ「うーん、でも、ここから後は、どうやって解いたらいいんだ?」
ホ「100の桁は桁上がりしないことがわかったから、10の位から桁上がりすることを考えると、“(1)+E+0=N”、つまり“1+E=N”で……“N=E+1”ってことになるよね」
ワ「ええ。それが?」
ホ「この式を10の位に代入してみてごらん?」
ワ「うーん。“N+R=10+E”だから“(E+1)+R=10+E”になりますが……。あれっ? この式を計算し直してみると“R=10+E−E−1”で“R=9”になってしまう。9は“S”で使われているから、これはダメってことですね?」
ホ「ということになるね。でも、1の位の和が桁上がりするとしたら?」
ワ「ええと、“(1)+(1+E)+R=10+E”で、つまり“R=8”というわけか」
SEND
9□□□
+ MORE
108□
−−−−−−
MONEY
10□□□
|
ワ「これで4つ。残りも“E”“N”“D”“Y”の4つか……」
ホ「1の位を計算してみたら?」
ワ「1の位は100の位にも桁上がりするから“D+E=10+Y”ですよね。しかも0、1、8、9は使われているから、“1<D<8”“1<E<8”“1<Y<8”ってわけか。ついでに“1<N<8”でもあるわけだ。それから“D+E>11”ってことですね。ここで“D”と“E”に数字を代入してみると……」
(条件)
1<D<8
1<E<8
1<Y<8
1<N<8
D+E=T とする。
(Dに数字を代入し、桁上がりする条件を求める)
D=2 → E>=10 E>8で「×」。
D=3 → E>=9 E>8、かつ9は既使用で「×」。
D=4 → E>=8 E=8、9は既使用で「×」。
D=5 → E>=7 E=8、9は既使用で「×」。
E=7のとき、T=12、Y=2で「○」だが→
→N=E+1=8。8は既使用だから「×」。
D=6 → E>=6 E=8、9は既使用で「×」。
E=7のとき、T=13、Y=3で「○」だが→
→N=E+1=8で、8は既使用だから「×」。
E=6のとき、6はDで既使用なので「×」
D=7 → E>=5 E=8、9は既使用なので「×」。
E=7のとき、7はDで既使用なので「×」。
E=6のとき、T=13、Y=3で「○」だが→
→N=E+1=7。7はDが既使用なので「×」。
E=5のとき、T=12、Y=2で「○」かつ→
→N=E+1=6。6は他で未使用なので「○」。
ワ「結局、“D”の値は7しかありませんね」
ホ「じゃ、それを数式に代入してみたら?」
ワ「“D=7”のときは“E=5”“Y=2”“N=6”ってことになりますね。これを元の数式に代入してみたら……」
SEND
9567
+ MORE
1085
−−−−−−
MONEY
10652
|
ワ「ちゃんと計算が合ってますね。これで正解ってことですか?」
ホ「BASICのプログラムも同じ答えだから、正解なんだろうね、きっと」
ああ、こんなことしていて、また原稿の締切が……。
もう一問の数学推理クイズを見る
トップページに戻る