覆面算の基本的な解き方

覆面算というパズルがあります。

こんなやつです。

$$SEND + MORE = MONEY$$

  • 各文字には0から9の数字が当てはまる(同じ文字には同じ数字、異なる文字には異なる数字)。
  • 最上位の桁に0は当てはまらない(つまり、この問題ではSM0ではない)

脱出ゲームの序盤の謎として覆面算が出ることがありますが、「私、数学苦手だから…」といって切られることが多いです。

ですが、覆面算は数学ではなく、数字パズルです。

数学ではなく、数字パズルです。

慣れるとかなりスマートに解くことができます。

覆面算と言っても足し算に限らず引き算掛け算割り算…などいろいろありますが、今回はスタンダードな足し算でいきましょう。
SEND+MORE=MONEYの問題を例に、解く流れやコツ、テクニックなどをいくつか紹介しようと思います*1

みんなも覆面算マスターになろう!!!!

覆面算を解く流れ

覆面算を解くときにはいくつか必要なものがあります。

  • 十分な大きさの紙面(かなりごちゃごちゃするので、スペースに余裕があると良いです)
  • 鉛筆、ボールペンなど(2色以上あるとなお良い)

覆面算を解くときは次のような流れで解くことが多いです。

  1. 筆算の形にする
  2. 桁数等に着目し、すぐに確定する文字を探す
  3. 文字ごとに考えられる数字を絞り込む
  4. 場合分けをする

覆面算を解くにあたって、特にこの絞り込み場合分けが重要です。ここを疎かにすると一気に泥沼になります。

順番に見ていきましょう。

筆算の形にする

初めから筆算の形で出題されることも多いですが、そうでない場合は筆算の形で書き直しましょう。

このとき、O(オー)の文字が含まれる場合は0(ゼロ)と混同しがちなので、他の文字に置き換えるとなお良しです。Qとかいいかもしれないですね。僕は\phiで置いてます。

また解き進めるにあたり、数字と文字の対応表も近くに書いておくといいです。対応表を書いておくことで、あとどの数字が残っているのかというのが一目瞭然になります。これは嬉しい。

これだけでもかなり見通しが良くなりましたね。

桁数等に着目し、すぐに確定できる文字を探す

まず一番考えやすいのは、答えの最上位の桁です。それぞれの数字の桁数に着目することで、答えの最上位の桁として考えられる数字はかなり絞られます。

ではここでクイズです。

4桁の数と4桁の数を足したとき、その和として考えられる一番大きな数は何でしょうか?

和をできるだけ大きくしたいのですから、足す数もできるだけ大きくしてやればいいのです。
4桁の数として考えられる最大の数は何でしょうか?そうですね。9999ですね。
このことから4桁同士の和として考えられる一番大きな数は、$$
9999+9999=19998
$$となります。

これは言い換えれば、

4桁の数と4桁の数を足しても、19998より大きくなることはない。

ことがわかります。

今回の例に当てはめて考えれば、

MQNEYの最大値として考えられるのは19998である

ことがわかりますね。M0でないことから、M=1であることがわかりました!やったね!

けっこうややこしいように感じるかもしれないですが、
A「この旅館2万円だってよ」
B「俺1万円以上持ってないんだよね」
C「俺もだわ」
A「じゃあお前ら合わせても泊まれねえじゃねえか(自分は出す気がない)」
のように考えれば意外とスッと理解できるかもしれません。え、わかりにくい?ごめんね。

また、繰り上がりが確定したところはしっかりと書いておきましょう


文字ごとに考えられる数字を絞り込む

桁数に着目して数字を決めたあとは、各桁の足し算を見て考えられる数字を絞り込みます。

例えばここ。

下位の桁(右の桁)からの繰り上がりはまだわかりませんが、Sとして考えられるのは89であることがわかります。
なぜなら、S1を足して10以上になる(繰り上がりを発生させる)ためには、S=9である必要があるためです。下位の桁からめでたく繰り上がりが来ると期待しても、S=8またはS=9である必要があるでしょう。



また、このとき赤枠の中の計算(S+1)をした結果は、繰り上がりが来たとしても来なかったとしても10または11になります。つまり、Qの値として考えられるのは0または1ということになりますね。
しかし、1は既にMが割り当てられていますので、Q=1とはなりません。このことからQ=0がわかります。やったね!




次に着目する桁はここ。

E0を足して、Nになっています。ですが、異なる文字には異なる数字が当てはめられるため、下位の桁から繰り上がりが起きているということがわかりますね。
さらにさらに、E9ではありません*2。なぜなら、E=9の場合は繰り上がりが起こりN=0となりますが、0は既にQが割り当てられているためです。つまりE8以下であることがわかり、上位の桁への繰り上がりも起こらないことがわかります。

まとめると、赤枠で囲まれた桁において

  • 下位の桁から繰り上がりが起きている
  • E+1=N
  • 上位の桁への繰り上がりは起こらない

ということがわかりました。


繰り上がりが具体的になったことから、保留状態だったSの値が9であることがわかりました。やったね!


また、E+1=Nという式でも十分良いのですが、現在考えられるのは6パターンなのでこれくらいなら列挙しちゃいましょう。


場合分けをする

さて、現在わからないものは

  • ENの具体的な値(6種類)
  • R,D,Yの具体的な値(それぞれ7種類)
  • 1桁目から2桁目への繰り上がりの有無(繰り上がりのあるなしで2種類)

です。
ある程度解き進めると、筆算とにらめっこしているだけでは簡単に解けなくなる壁にブチあたります。
そこで必要になってくるのが、場合分けです。

簡単に言えば、「どれが正解かわからないけど、一つ仮定して試してみる」という手法です。
間違った道ならば途中で矛盾にブチ当たるので引き返せば良いだけですし、正しい道ならば最後まで上手くいくので万々歳です*3

この場合分けですが、闇雲にやったところでそうそう上手くはいきません。以下の2点のコツがあります。

  • 種類数の少ないところで場合分けをする
  • どこから場合分けしたかをしっかり書いて、すぐに引き返せるようにしておく

順番に見ていきましょう。


種類数の少ないところで場合分けをする

もう一度、場合分けできる可能性のあるものを見てみます。

  • ENの具体的な値(6種類)
  • R,D,Yの具体的な値(それぞれ7種類)
  • 1桁目から2桁目への繰り上がりの有無(繰り上がりのあるなしで2種類)

ここで例えば「よーし!Rの値で場合分けするぞー!」と意気込んだところで、目の前には道が7本に分かれているわけですから、調査が大変です。
R=2だったら…R=3だったら…R=4だったら…という場合分けを7回行わなければなりません。これはつらい。

一方で、1桁目から2桁目への繰り上がりの有無だったら2種類しか場合分けが無いので、調査の数が少なくて楽になりますね。
特に2種類の場合は、一方がダメだったら自ずともう片方が正解だとすぐにわかります。これは嬉しい。

ということで、ひとまず1桁目から2桁目への繰り上がりの有無で場合分けを行うことにしましょう。


どこから場合分けしたかをしっかり書いて、すぐに引き返せるようにしておく

これ、本当に大事です。RPGのセーブデータをきっちり管理するようなもの、と言えば重要度がわかりますでしょうか。
解いている途中の筆算の上から場合分けを書いてしまうと、ダメだとわかった時にどこまで引き返せば良いのかわからなくなります。
多少面倒ではありますが、現在の状態をコピーして、そこから場合分けを行うようにしましょう

イメージとしてはこんな感じです。

f:id:canaan1008:20190320180447p:plain

繰り上がりが起こらない場合については右側にコピーしたエリアで考えます。こうすることで、この先矛盾が生じて引き返さなければならないときにどこまで戻れば良いか一目瞭然になります*4


さて、というわけで繰り上がりの有無で場合分けを行いましょう。
まずは繰り上がりが起こらないと仮定した場合。

f:id:canaan1008:20190320180447p:plain

下から2桁目を見ると、繰り上がりをもらっていないことから$$N+R=10+E$$ということがわかりますね(上位の桁に繰り上がりが起こっているため、右辺は10+Eになることに注意)。
NEの表を見ると、これを満たすようなRR=9であることがわかります*5

しかし、既にS=9であるためこれは矛盾です。
なぜ矛盾が生じたのでしょうか?それは、下位の桁からの繰り上がりが起こらないと仮定したためです。

f:id:canaan1008:20190320181601p:plain

ということで、繰り上がりが起こらなければいけないことがわかりました。
場合分けの前の段階まで戻り、繰り上がりが起こるルートに進みましょう。
(今回は場合分けが2種類なので、一方がダメとわかったらもう片方が正解ルートであることが確定になります。場合分けが3種類以上あるときは、↑のような行程を何回か繰り返します。)



はい。繰り上がりが起こると確定したのでそのように書いておきます。

下から2桁目は、繰り上がりが起こっていることも考慮すると$$N+R+1=10+E$$という関係式が成り立ちます。
NEの表を見ると、これを満たすようなRR=8であることがわかります。やったね!

8が割り当てられてしまったため、ENの表から8を含む行は消してしまいましょう。


総仕上げ

ここから先は、絞り込みと場合分けを駆使していきましょう。

あと使っていない桁は、最下位の桁のみです。
繰り上がりが起こっていることを考えると、$$D+E=10+Y$$であることがわかります*6

ここで、DEは\begin{eqnarray}
D&=&2,3,4,5,6,7\\
E&=&2,3,4,5,6
\end{eqnarray}という制約があります。DEを足して繰り上がりを発生させるためには、E=2は不適になります。なぜなら、考えられるどのDの値と足しても繰り上がりが発生しないためです。
また、E=3,4も不適です。なぜなら、E=3のときD=7であれば繰り上がりが発生しますが、このときY=0となり既にQ=0であることと矛盾するためです。E=4のときも同様に、うまいことDを選んだとしてもY=0またはY=1となるため不適です。

このような絞り込みから、$$E=5\text{ または }E=6$$であることがわかりました。

同様の理由から、D=2,3も不適であることがわかります。どのEと足しても、繰り上がりを発生させることができないためです。
また、D=4,5も不適です。E=5,6と足すことで繰り上がりを発生させることはできますが、このときY=0またはY=1となり、矛盾が発生するためです。

このことから、$$D=6\text{ または }D=7$$であることがわかりました。

E,Dの絞り込みはかなり厳しくできましたが、E=5, D=6のペアはY=1となることから不適であり、E=6, D=6のペアはそもそも数字が重複しているので不適です。


さあラストスパートです!!!
これだけ絞り込めていれば、あとは正直どこから手を付けてもすぐに解けるのですが…

2つの表を見比べると、E=6のときにND7になってしまいます。これは不適ですね。

ということで、E=5であることがわかりました!やったね!
これに伴い、N=6, D=7, Y=2であることがわかりました!やったね!!!



覆面算が解けたら、必ず検算をしましょう。

  • 数字に置き換えた筆算は正しいですか?
  • 文字と数字の対応は正しいですか?
  • 最上位の桁が0以外になっていますか?

検算を行って大丈夫そうでしたら、覆面算は終了です。
本当にお疲れ様でした。

まとめ

覆面算はパズルの中でも初見のハードルがかなり高く感じられます。
しかし、絞り込み場合分けをうまいこと行うことでただの数字パズルになります。
(今にして思えば、序盤に行ったM=1の決定も立派な絞り込みですね。実はその後もこっそりと絞り込みや場合分けが行われています。)

次回は、式変形を使ってさらに見通しを良くするコツをお伝えできたらな、と思っています。
それでは。

*1:ちなみにSEND+MORE=MONEYの問題は覆面算の例として一番有名なものです。

*2:さらに言えば、E8でもありません。E=8のときN=9となってしまい、S=8,9のはずだったSが入る場所がなくなってしまうためです。

*3:覆面算は暗黙の了解として「解は一意に定まる」というルールがあるので、正しい道がわかれば他の道は間違っていることがわかります。正しい道がわかっているのにわざわざ間違った道が間違っていることを確かめる必要は無い、ということです。

*4:ちなみに、僕が覆面算を解くときはiPadのお絵かきソフトで解いています。場合分けをするときは、新しいレイヤーに書くことですぐに引き返せるようにしています。便利。

*5:E+1=Nという関係式もあるので、連立させてENを消去してもOKです。

*6:実は、ここまで来たら筆算はもう使わないので避けておいてOKです。