朝日新聞2004年9月25日のパズルパーク問題

問題

以下の計算式で2桁の数字が何れもぞろ目となるのはどのような時か。

解答への道(ヒント)

以下の様になるのはどんなときかということ。

Aが1〜9,Bが1〜9の合計81通りの虱潰し問題。

for( int a=1; a<= 9; a++) {
  for( int b=1; b<= 9; b++) {
    int x = (10*a+a)*(10*b+b);
    int c1 = (x/1000)%10;
    int c2 = (x/100)%10;
    int d1 = (x/10)%10;
    int d2 = (x/1)%10;
    // c1,c2がぞろ目,d1,d2がぞろ目となる制約を書く。
    // その後,c1,c2,d1,d2から同じような計算式で,e1,e2,f1,f2を求めぞろ目となるか調べる。
  }
}

今回は毛色を変えてEXCELを使って解く方法を示します。

行,列のどちらがaa,bbでも良いのですが,行をaa,列をbbとしてEXCELで表を作ってみましょう。

計算結果を表示するのはまずB2の位置に「=$A2*B$1」という式を入れる。

Aの前に$,1の前に$を入れるのがポイント。これをコピーして,他の計算結果の所にも入れると以下の表が完成する。

計算結果の表を見て自分の目でぞろ目を探しても良いが,プログラマはぞろ目を自動で表示することを考える。

別のセルに以下のような式を代入する。

=IF(INT(MOD(B2/1000,10))=INT(MOD(B2/100,10)),B2,"")

これを81個分コピーすると,おっ,綺麗にぞろ目が表示されたぞ

後は33*88,77*44の計算をすればOK。

今回4桁中の上位2桁のぞろ目しか判定していないが,それだけで下位2桁もぞろ目のものしか表示されなかった。下位2桁がぞろ目で表示されなければ更に下位2桁がぞろ目であることの制約式を書けば良い。

コンピュータを使って解くってことはCやPerlのプログラムを作ることだけではありません。CやPerl以外でも使えるものは何でも使いましょう。