このブログ内を検索可能

2017年9月30日土曜日

モンパレ 数値解析法

大魔王バーン、獣王クロコダイン実装がまもなくだが、それまで暇をもてあましているので、ちょっとモンパレの画像を見ていたら、一部加工された、バトスタの点を掲載したものを発見。

注意 途中でミスが発生。i,j,kの評価の時に、他の可能性があることを忘れていたので、
それを修正した。それでも間違ってたら…まあ…。

バトスタでポイントを知られないために、4戦の合計をこういう感じにしている人がいた。
1戦目3??90Pt
2戦目264??Pt
3戦目79974Pt
4戦目67122Pt
合計20????Pt
このようにして隠していた。
そこで我は当然、この???を求めたくなるわけである。
なぜこんなことをするのかというと、ちょっと数字の謎解きの楽しさを共有したいからか…?
いわゆる虫食い算というやつ。応用すればこういうときに役立つかも。

その解法を考えていく。ぱっと見た時点で、一の位は決定されないことが分かる。
まあ気を取り直して、合計の千の位の特定を行う。
一万の位をそれぞれ足すと、18となる。つまり繰り上がりが2入っている。
となると、千の位は(百の位からのくりあがり)+?+6+9+7=2?という式を得る。
次に百の位は(十の位からのくりあがり)+?+4+9+1ということになる。

ここで場合わけ。
千の位の等式について、2?の部分はそれ以外に制約がないので、0~9のそれぞれが考えられる。
0の場合、(百繰り上がり)+?+6+9+7=20となり、すでに?は存在しない。
これは0,1,の場合で起こる。
よってここの?は2~9のいずれかである。
2の場合、(百繰り上がり)+?+6+9+7=22から、(百繰り上がり)+?=0
これより、百の位では繰り上がらず、かつ?は0となる。
すると30?90+264??+79974+67122=202???という式になる。
百の位が繰り上がらないことから、(十の位からの繰り上がり)+?+4+9+1=0という式になり、
これはもう?は存在しない。すると、2の場合は正しくなかった、という結論に至る。

では次、3の場合…という風に行っていくのがたぶん虫食い算の解き方ではないか…と思った。

しかしだ。こんなに頭をひねらせなくても、我々には文字というものがある。各?をそれぞれaからhでおきなおせばいい。それだけ。つまり3ab90+264cd+79974+67122=20efgh
あと繰り上がりが分からないので、十の位への繰り上がりをi,百の位への繰り上がりをj,千の位への繰り上がりをkとする。一万の位への繰り上がりは、先述の通り、2であることが分かる。

それで、各位とその和、そして合計のヒントを参考に方程式を作ると
(以降は10iと表記したら10*iのことを意味する)
一の位に関してd+6=10i+h
十の位に関してc+i+18=10j+g
百の位に関してb+j+14=10k+f
千の位に関してa+k+22=20+e
総和に関して30090+1000a+100b+26400+10c+d+147096=200000+1000e+100f+10g+h
すなわち1000(a-e)+100(b-f)+10(c-g)+d-h=-3586
という5個の方程式を得ることができる。
普通ならばこの時点でお手上げな人も多いはずだが、我は数学科なので当然これくらい解けなければならないということにして、まず式を見る。

うん…?連立…一次方程式…線形…?あっ(察し)
これはあの行列に持ち込む話や!!
ここからは高校生は分からなくなるが、とりあえずこういう感じ。なんでそうなるかといわれたら、
まあ連立一次方程式の解き方と行列の簡約化の操作が同じ、ということとあと何かで説明できそう。
そういうわけで、ここからは行列に持ち込む。a,b,c,…の順に成分を記述。
一の位0 0 0 1 0 0 0 -1 -10 0 0 -6 (一番右の6は拡大係数行列を考えている)
十の位0 0 1 0 0 0 -1 0 1 -10 0 -18
百の位0 1 0 0 0 -1 0 0 0 1 -10 -14
千の位1 0 0 0 -1 0 0 0 0 0 1 -2
総和  1000 100 10 1 -1000 -100 -10 -1 0 0 0 -3586
この行列の簡約化をすることになる。
もちろんこれはとっとと計算ソフトにやらせて、答えを出させる。
1  0  0  0  -1  0  0  0  0  0  1  -2 
0  1  0  0  0  -1  0  0  0  1  -10  -14 
0  0  1  0  0  0  -1  0  1  -10  0  -18 
0  0  0  1  0  0  0  -1  -10  0  0  -6 
0  0  0  0  0  0  0  0  0  0  0  0 
こうなった。最下行は無視できて、これは下記のようになる。
a-e+k=-2
b-f+j-10k=-14
c-g+i-10j=-18
d-h-10i=-6
よってa=e-k-2,b=f-j+10k-14,c=g-i+10j-18,d=h+10i-6と、a,b,c,dがe,f,g,h,i,j,kを用いて表される。
ただの方程式ならば、これでe~kを任意定数とすると、全ての解を網羅したことになる。

だが。

最初につけた条件、a~kは0~9のいずれかの整数値を取る、というのがまだ入っていない。
となると、あとはa,b,c,dの条件で数を絞っていくことができる。(e~kに関しては進展しない)

ここから修正

まず、第2式に注目。f-j+10k-14が0以上9以下なので、kは1,2,3のいずれかになる。
kが0の場合、f-j-14はどうやっても0以上9にはできない。なぜなら、f-jの最大値は9なので、
この式全体としては最大で-5にしかならないので。
kが4以上の時、f-j+26を9以下にしたいが、f-jは最小が-9なのでがんばっても最小は17でアウト。
よってk=1,2,3の時を考えることにする。
まずk=3のとき。4つ目の式を見て同じように考えると、iは0か1のどちらか。
各iに対して、jを求めると、候補は1か2のいずれかになる。
ただしこの時点で第2式はf+15またはf+14となり、これは0以上9以下にならない。
よってk=3の時、実際には解は存在しないことになる。

次にk=2のとき。やはり第4式からi=0,1に分けられる。
i=0のとき、j=1または2であり、i,j,kを求めることにより、a,b,c,dがそれぞれe,f,g,hで表せる。
あとはa,b,c,dが0以上9以下であるという条件から、e,f,g,hを絞り込む。
すると、e,f,g,hのとりうる値の数の積をとったものが総数となる。
これに則ると、
k=2かつi=0かつj=1のとき 6*5*2*4=240通り
k=2かつi=0かつj=2のとき 6*6*8*4=1152通り
k=2かつi=1かつj=1のとき 6*5*1*6=180通り
k=2かつi=1kつj=2のとき 6*6*9*6=1944通り

これをまったく同様にk=1でも行う。すると総数は2898通り。

よって全体の総数は、6414通りであることがわかる。
(ちなみにこの答えにいたるまで、相当な数の計算を手でこなしているので完全にあっているかはわからないがおそらくあっているはず)

このようにして、不等式と行列を用いて虫食い算の全てのパターンを知ることができる、というなかなか謎解きっぽく非常に面白い問題だった。
やってる感じとしては難関大学入試の整数問題に似ている感じか…。
大学入試に覆面算を題材として出すのもこれはものすごくありだと思った。
…ただ連立一次方程式の解法がどうしても高校までのやり方でやるとかなりきついから一概にいいとはいえないが…。