覆面算

覆面算（ふくめんざん）は、0から9の数字がそれぞれに対応する別の記号に置き換えられた計算式を与えられ、どの記号が何の数字に対応しているかを推理し、完全な計算式を導き出すパズルである。解き手のヒントになるように、計算式は筆算の形で与えられることが多い。 同じ文字には同じ数字が入り、違う文字には違う数字が入る。 最上位の文字には0は入らない。 1桁の場合も最上位であるので0を入れないという考えが一般的であるが、1桁の場合は0を認めるという考えもある。 問題に出ている数字を文字に当ててもよい。 AB2DEF×2=2DEFAB 「A」には、0から9までのいずれかの数字が入る。2つある「A」の一方が例えば1と決まると、もう一方の「A」にも自動的に1が入る。そして、「B」には、1以外のいずれかの数字が入る。もともとの式に現れている2を使ってもよい。 覆面算のうち、各項が意味のある単語となっているものをワード覆面算と呼ぶ。 一例を挙げる。 バナナ+バナナ=シナモン 掛け算のワード覆面算の場合、A × B = C の形式の物と、筆算で表記され途中の積もすべて意味のある言葉になっている物がある。 それぞれの例を1つずつ挙げる。 みず×みず=飲みみず 　大宮 ×大宮 大井町 横浜　 浜松町 ワード覆面算のうち、各項が数字を表す単語となっており、かつ、その数字の計算も正しいものを数詞覆面算と呼ぶ。 一例を挙げる。 third+third+third+seven=eight （1/3+1/3+1/3+7=8 となり、正しい式である。） Dani Ferrai・田村三郎らにより、コンピューターによる検討が行われ、多くの作品が発表されている。 ワード覆面算のうち、各ワードはそのままにして演算記号だけを変えて二つ以上の覆面算になるものを複合覆面算と呼ぶ。 覆面算のうち、使用された文字を対応する数字の順に並べると短文が表れるものをWord Arithmeticと呼ぶ。 すべての数字を使い切るために、割り算の筆算による形で出題されることが多い。 以下に例題を挙げる 　　　　　　　いしき しれい）てつていてき 　　　　うてほき　 　　　　　いんして 　　　　　てほうて　 　　　　　　いつれき 　　　　　　いりてつ 　　　　　　　　ほて 除数（割る数）・被徐数（割られる数）・商の3つ（例題の太字の部分）は意味のある言葉にすることが多い。 覆面算のうち、文字の配列に趣向を凝らし、同じ文字が固まっていたり直線状になっているものを幾何模様覆面算と呼ぶ。 以下に例題を挙げる。 足す項の数が多い覆面算を超高層覆面算や超大型覆面算と呼ぶ。縦長になるのを避けるために掛け算の形で出題されることが多い。数字にも意味を持たせることができる数詞覆面算が多い。 項数に関する定義はないが、超高層覆面算として発表された作品の中で最小のものは約150項である。 以下に例を挙げる。 に×5000+せん×4+にせん×8=さんまん 一問では複数解が出る式を複数組み合わせることによって解答が一意になるようにしたものを連立方程式になぞらえて連立覆面算という。 連立覆面算では違う式にあっても同じ文字は同じ数字、違う文字は違う数字である。 以下に例を挙げる。 a+b+c=ab b+b+b=c この問題は、上の式だけだと7解（b=0 を認めると8解）、下の式だけだと3解が存在するが、（上の式のb）=（下の式のb）,（上の式のc）=（下の式のc）より解が一つに決まる。 覆面算の解き方は問題によって変わる部分が多いので統一的な解法は存在しないが、多くの問題で使用される考え方がいくつかある。 注：以下の解説には例題として「バナナ+バナナ=シナモン」という問題を用いる。 足し算の覆面算において、和の桁数が他の桁数より多い場合には繰り上がりが発生している。このことから最上位の文字を確定する（又は絞り込む）ことができる。 例題において、シに入る数字は百の位からの繰り上がりなので1しかありえない。 また、各桁で加えている数が同じなのに和が違う場合、繰り上がりが影響していると考えられる。 例題において、一の位も十の位も「ナ+ナ=○」の形になっているが、文字が異なっている。これは、一の位から十の位に繰り上がりがあるためである。 繰り上がりの有無によって文字の範囲を絞り込むこともある。 上の例から、「ナ+ナ」「バ+バ」は共に繰り上がる。このことから「ナ」「バ」は共に5以上である事が分かる。 同じ数を足すと偶数になる。これを利用して文字の可能性を絞り込むことができる。ただし、繰り上がりに注意する必要がある。 例題において、和の一の位の「ン」は偶数になるが、「ナ+ナ」が繰り上がるため、「モ」「ナ」は共に奇数になる。 数字が置き換えられた記号を変数と考えて数式をたてて解くことができる。必要に応じて各記号にそれぞれ行番号と列番号を添えて区別することがある。数式には等式、不等式、合同式などが考えられる。 例題において、和の一の位の「ン」に対して、「ナ+ナ」が繰り上がるため、十の位の「モ」は1だけ増えるので、「モ=ン+１」 となる。 例題において、和の百の位の数字は、十の位から1だけ繰り上がるので、合同式を用いて「バ+バ+１ ≡ ナ (mod 10)」と表される。 九去法などを利用して、文字の範囲を絞り込んだり検算することがある。 覆面算には決まった作り方は存在しないが、一般的には テーマを決めて単語の候補を挙げる。 候補を組み合わせて式を作る。 検算する。 解が1つなら完成。 解が複数あるか存在しない場合、2.に戻り新しい組み合わせを考える。 といった手順で作られる。 例として、ヨーロッパをテーマとした覆面算を考える。 まず「イギリス+スイス=ヨーロッパ」という式を考えると、これには解が2つある。次に助詞をつけて「イギリスと+スイス=ヨーロッパ」という式を考えると、これは解が3つある。次にイギリスをイタリアに変えて「イタリア+スイス=ヨーロッパ」という式を考えるとこれは解が1つである。これで1つの問題が完成である。 上の手順で「検算する」と書いたが、実際には見ただけで解がなかったり複数あるのが分かる場合も多い。 以下に代表的な例を示す。 文字数過多 数字は10種類しかないため11種類以上の文字を使用した問題には解がない。 桁数不足 和の桁数が他よりも2桁以上（項数が多い（12以上）場合にはこの限りではない）大きいと、繰り上がりを考慮しても最上位が0となる。これはルールで認められていない。 例えば「one+two=three」という問題は、3桁+3桁なので和は最大でも4桁にしかならない。 浮き 全体で一度しか使われていない文字が同じ桁にあると、その2文字が交換可能となり複数解が発生する。これを「浮き」という。 例えば「カナダ+ロシア=アメリカ」という問題は、10の位の「ナ」と「シ」が交換可能となる。100の位は「カ」、1の位は「ア」がそれぞれ和でも使用されているので問題ない。 アメリカなどでは浮きがある場合小さい数字を上の文字に当てるというルールがあり、複数解の要因とならない。 同じ単語を複数個重ねることにより浮きをなくす作成法を朝日新聞方式と呼ぶ。かつて朝日新聞紙上でこの方法で作られた問題が多く掲載されたことから高木茂男によって命名された。[要出典] 上で例題としてあげた「バナナ+バナナ=シナモン」はこの方法で作られたものである。 あらかじめ一意解であることが判明している式に適当な言葉を当てはめて問題を作ることができる。 例えば「abcd+fdgh=abcde」という式がある。「abcde」に「ふくめん算」という文字をあてはめて他を調整すると「ふくめん+さんすう=ふくめん算」という問題を作ることができる。 パズル通信ニコリや虫食算研究室では、一意解の問題を提示して入れる単語を募集したことが何度かある。 コンピュータで覆面算を作成するプログラムが存在する。最も一般的なのは、単語群をデータとして渡すとその単語を組合せて問題を作るものである。 単語の組合せが限定される数詞覆面算ではコンピュータによる探索が一般的である。 10進法であれば、各文字に0～9の数字を当てはめて、式が成立することを確認すれば良いので、10! 通りの方法を確認することで解くことができる。一般的に r進法であれば、r! 通りの確認をすることで、コンピュータならば容易に解く事ができる。しかし、「何進法であるか」も入力の一部となっている問題については、2つの数字の加算についての問題がNP完全であることが証明されており、非常に難しいクラスに属する問題であると考えられている。 数字と文字（記号）との間で式が成り立つような対応を求めるパズルを概して "cryptarithm" と呼び、その答えが実際の言葉になるなら"alphametic"と呼ぶ。 ただし、 "cryptarithm" という語は覆面算も虫食い算も包含し、二者の区別をしないので注意が必要である。そのため、"cryptarithm" の意味を汲むなら「暗号計算問題」あるいは「換字計算問題」となる。 最初の例題の解答 142857×2=285714 ワード覆面算の解答 877+877=1754, 76×76=5776, 29×29=841 数詞覆面算の解答 15687+15687+15687+49290=96351 Word Arithmetic の解答 636769÷807=789 あまり 46 文字を0に対応する文字から順に並べると、「れんりつほうていしき（連立方程式）」となる。 幾何模様覆面算の解答 212×212=44944 超高層覆面算の解答 1×5000+20×4+120×8=6040 連立覆面算の解答 1+3+9=13, 3+3+3=9