"SEND MORE MONEY"供養、あるいは算額ごっこ
覆面算
覆面算は、数字の一部あるいは全部がブランクや文字で置きかえられた計算式を完全な数式に復元する数学パズルで、次のような規則をもつ。
- 文字が使われた問題では、ひとつの文字に対応する数字はひとつだけとなる。
- 逆に、ことなる文字がおなじ数字をあらわすことはない。
- 当然、数値の最上位ケタにおかれた文字はゼロではない。
- 条件を満たす数字の組みあわせ、つまり正解はひとつだけである。
文字が意味をもつ覆面算の古典的名作
SEND + MORE ------ MONEY
これは有名なパズル作家のデュードニー*1が作成したもの。
「モットカネオクレ」という文章が計算式になっているところがなかなかユーモラスで、古典的な名作だと思う。
覆面算を供養する
ところで、現在は「覆面算不遇の時代」だと思う。
Googleで"SEND MORE MONEY"を検索すると、実際にこれを取りあげたページは山ほど見つかるが、大抵「覆面算を解くコンピュータプログラム」の例題としてであり、しかもほとんどのアルゴリズムが規則にしたがって各文字にすべての数字を当てはめて計算してみるという、いわばしらみつぶし型のアルゴリズムをもちいている。あまり美しくない。
それに、せっかく意味をもたせた単語の組みあわせになっているのに、意味などわからない(コンピュータにとっては"SEND+MORE=MONEY"だろうが"ABCD+EFGB=EFCBH"だろうが関係ない)プログラムが暴力的に解いてしまうのでは、問題もうかばれないだろう。
そこで、年のはじめのためし*2とて、かなりヤサグレてしまっているだろうこの問題の精をなぐさめるため、自分で解いてみることにした。
初期状態
計算式と対応表
【計算式】 SEND + MORE ------ MONEY 【対応表】 数字: 0123456789 文字: **********
推測結果
- 最上位桁のMは1
ステップ1
計算式と対応表
【計算式】 SEND + 1ORE ------ 1ONEY 【対応表】 数字: 0123456789 文字: *M********
推測結果
- Sは8か9
- Oは0か1 → Oは0
- M=1に決定しているため
ステップ2
計算式と対応表
【計算式】 SEND + 10RE ------ 10NEY 【対応表】 数字: 0123456789 文字: OM********
推測結果
- 100の位にはくり上がりの+1がある
- くり上がりがなければE+0=Nから、E=Nとなってしまう
- N=E+1
- 1000の位にはくり上がりはない
- くり上がりがあるとすれば、E+0+1=10+Nとなり、E=9、N=0となってしまう
- S=9
- 10の位にはくり上がりの+1がある
- くり上がりがなければ、N+R=10+E → (E+1)+R=10+E → R=9となってしまう
- R=8
- N+R+1=10+E → (E+1)+R+1=10+E → R=8
ステップ3
計算式と対応表
【計算式】 9END + 108E ------ 10NEY 【対応表】 数字: 0123456789 文字: OM******RS
推測結果
- D+E=10+Y>=12 → Y>=2
- 0と1は割り当てずみのため
- N+8+1=10+E → N=E+1と等価
- E<=6
- N=E+1であり、E=7だとN=8となってしまう
- D>6 → D=7
- D+E>12、E<=6
ステップ4
計算式と対応表
【計算式】 9EN7 + 108E ------ 10NEY 【対応表】 数字: 0123456789 文字: OM*****DRS
推測結果
- E=5
- E<=5
- N=E+1で、7以上は割りあてずみ
- E>=5
- 7+E>=12
- E<=5
- N=E+1=6
- Y=2
- 7+5=10+Y
結果
【計算式】 9567 + 1085 ------ 10652 【対応表】 数字: 0123456789 文字: OMY**ENDRS
すべて理詰めで解けてしまった。やっぱり名作だと思う。
画像
新千歳空港。縁起のいい名前。