先日、パズル懇話会で、「整数計画ソルバーで碁石ひろい」を解いたことを発表した。その後のコメントで「整数計画ソルバーで虫食算や覆面算は解けるか」を聞かれた。それをうけてやってみみた。
その1の内容はこちら
三ケタ×三ケタを整数計画ソルバーで
その内容を全部つめこんだLPファイルがこちら。
頭のケタの0チェックをやっていないので、このままソルバーにかけると、000 x 000 = 00000 という答えも正解となる。
虫食算や覆面算を解くためには、このベースに独自の条件を足していけばよい。
「虫食算・筆算」で検索して問題を見つける・・・あった。
のページの「虫食い算の発展問題 その1」というのがぴったりなのでそれを題材で使わしてもらう。
・・・□4□
×・・□4□
――――――
・・□□1□
・・□□4
□□□□
――――――
□□0□□□
・・・ABC
×・・DEF
――――――
・・GHIJ
・KLMN
OPQR
――――――
STUVWX
にあてはめて
LPに数字の条件を足す。
b=4
e=4
i=1
k=0
n=4
u=0
それぞれの1番上位のケタは0にはならないので、それも入れとく。
a0=0
d0=0
g0=0
l0=0
o0=0
s0=0
scipにかけると。
246 x 549 = 135054 と出る。
別解チェックをするには、
「abc def が決まれば同じ答え」「1個でも違えば違う答え」なところに着目して、
a2 + b4 + c6 + d5 + e4 + f9 <=5
を付け加える。
そしてscipにかける。
と「no solution availavle」と他に答えがないことを示してくれる。