これを、パソコンで、ビジレスで、解いてみようと・・・。
[設問]
下の25個のマスに、3、4、5のどれかの数字を1つずつ書き入れます。
このとき、次のルールを満たさなければなりません。
「ルール」"5"が書かれたマスの上下左右に隣り合うマスにかかれた数字の合計は、
必ず3の倍数でなければならない [例1] [例2]。
例1

中央の5の上下左右の数を加える 4+4+3+4=15
15は、3で割り切れる。
例2

左上の5の上下左右(実際には、右と下だけ)の数を加える 3+3=6
6は、3で、割り切れる。
このとき、25個の数字の和のうち最大のものを求めなさい。

(07年度ジュニア算数オリンピックファイナル問題[5]より)
正解と解答を見ちゃいました。
117
例1

例1のように、
数字を書き込むとルールを満たしていて数字の合計は117である。
(5が18個、4が6個、3が1個)
以下、117が最大であることを示す…
と、38行にもわたって説明が書いてありました。
私には、簡単に、理解出来ない説明でした。
で、それを、省略しました。
最初、私は、この問題の意味がわかりませんでした。
この例1を、眺めているうちに、意味が分かってきました。
ルールのチェックをしようとする5の隣接する上下左右のマス内の
数を足すのであって、
その5は、除外する…。
そこを理解できたところで、ビジレスで、解き始めました。
例1を眺めていくと、真ん中の1つを中心に、『点対称』になっています。
ということは、(例えば)左上の3×3の組み合わせを考えていけばいい…、と、いうことに。
なぜ、それでいいのかは、考えないことにしました。
どうも、インチキ解き方で、ごめんなさい。

で、この表の赤文字A〜Iを、ビジレスの表のA〜I欄に入れることにしました。
すると、全部の枠(5×5)を、解決できそうです。
ピンク文字は、Eプログラムの内容です。("<"と">"は、全角に変えています)
< A#B#C#D#E# y$z$
<goto <TEST01
L "177-1" :XN "177-W" :R :W1
XN "177-2" :R :W1
XL 3 :NA 3,1 :R :W1
Vz$="A"
repeat
Vz$+ :VA#=2
repeat
VA#+
L "177-2" :R
N[z$][A#]
AP "177-W" :* :XN "177-W" :R :W1
until A#=5
XN "177-2" :R :W1 :L "177-W" :XL 1 :C 1 :R :W1
until z$="I" :<<OOO 1 OOO
L "177-2" :XN "177-3" :R :W1
<
Vy$="A" :gosub <SUB02
UJ=B+D :UK=FRAC(J/3)*3 :B K=0 :gosub <SUB03
Vy$="B" :gosub <SUB02
UJ=A+C+E :UK=FRAC(J/3)*3 :B K=0 :gosub <SUB03
Vy$="C" :gosub <SUB02
UJ=B+B+F :UK=FRAC(J/3)*3 :B K=0 :gosub <SUB03
<
Vy$="D" :gosub <SUB02
UJ=A+E+G :UK=FRAC(J/3)*3 :B K=0 :gosub <SUB03
Vy$="E" :gosub <SUB02
UJ=B+D+F+H :UK=FRAC(J/3)*3 :B K=0 :gosub <SUB03
Vy$="F" :gosub <SUB02
UJ=C+E+E+I :UK=FRAC(J/3)*3 :B K=0 :gosub <SUB03
Vy$="G" :gosub <SUB02
UJ=D+D+H :UK=FRAC(J/3)*3 :B K=0 :gosub <SUB03
Vy$="H" :gosub <SUB02
UJ=E+E+G+I :UK=FRAC(J/3)*3 :B K=0 :gosub <SUB03
Vy$="I" :gosub <SUB02
UJ=F+F+H+H :UK=FRAC(J/3)*3 :B K=0 :gosub <SUB03
R :W1 :<<OOO 2 OOO
XN "177-4" :R :W1
UJ=A*4+B*4+C*2+D*4+E*4+F*2+G*2+H*2+I
OJ :R :W1 :<<OOO 3 OOO
<TEST01
L "177-4" :R :XN "177-5" :R :W1
VB#=1 :VC#=0 :gosub <SUB04
VE#=6 :gosub <SUB05
VB#=2 :VC#=1 :gosub <SUB04
VE#=12 :gosub <SUB05
VB#=3 :VC#=2 :gosub <SUB04
R :W1 :<<OOO 4 OOO
END
<
<SUB05
V[E#]L="■"
V[E#]M="■"
V[E#]N="■"
V[E#]O="■"
V[E#]P="■"
return
<
<SUB04
VD#=C#*6
VG#=1+D# :VH#=2+D# :VI#=3+D# :VJ#=4+D# :VK#=5+D#
V[G#]L=[B#]A :V[G#]P=[B#]A :V[K#]L=[B#]A :V[K#]P=[B#]A
V[G#]M=[B#]B :V[G#]O=[B#]B :V[K#]M=[B#]B :V[K#]O=[B#]B
V[G#]N=[B#]C :V[K#]N=[B#]C
V[H#]L=[B#]D :V[H#]P=[B#]D :V[J#]L=[B#]D :V[J#]P=[B#]D
V[H#]M=[B#]E :V[H#]O=[B#]E :V[J#]M=[B#]E :V[J#]O=[B#]E
V[H#]N=[B#]F :V[J#]N=[B#]F
V[I#]L=[B#]G :V[I#]P=[B#]G
V[I#]M=[B#]H :V[I#]O=[B#]H
V[I#]N=[B#]I
return
<
<SUB02
<
L "177-3" :B [y$]!"5" :XN "177-S" :R :W1
L "177-3" :B [y$]="5" :XN "177-A" :R :W1
return
<
<SUB03
<
AP "177-S" :* :XN "177-3" :R :W1
return
<<□□□ 1 □□□
赤文字A〜Iの『345』の組み合わせは、19,683通りありました。


A〜I欄を、1個1個チェックしていき、設問に該当しないものを除いていきます。
その方法ですが、
1. 『A欄が5』と『それ以外』とに分けて、2つのファイルを作ります。
2. 該当欄が、5だったら、B+Dを行ないます。
3. その結果が、3で割り切れたものだけを選び出します。
4. そして、『それ以外』のファイルと一緒にします。
これと同じことを、B〜I欄についても、同様の処理を行っていきます。
そして、どんどん、該当しないデータを減らしていくのです。
ただし、2.の、加える欄は、それぞれ異なっています。
B欄は、A+C+E
C欄は、B+B+F
D欄は、A+E+G
E欄は、B+D+F+H
F欄は、C+E+E+I
G欄は、D+D+H
H欄は、E+E+G+I
I欄は、F+F+H+H
この加算した結果が、3で、割り切れるかどうかを、みていくことになります。
<<□□□ 2 □□□
条件にあうデータだけを分類しました。
2,115件です。
後半のJK欄に記入がないのは、調べた欄(ここでは、I欄)が5以外のものだからです。


<<□□□ 3 □□□
A×4+B×4+C×2+D×4+E×4+F×2+G×2+H×2+I
この計算をすると、5×5のすべての数を加えた数が求められます。
それをJ欄に入れました。
そして、その数を大きい順に並べ替えました。
これで、設問の
25個の数字の和のうち最大のものが、でてきました。
J欄の1、2行目の117が解答です。


<<□□□ 4 □□□
25個の数字の表をL〜P欄に作ってみました。
その1〜5行の並び方は、回答と、同じです。

L〜P欄の6〜10行を別の表にしたものが、これです。
J欄を中心に45度斜めの線対称にしてみると、同じ並び方になりました。

J欄を中心に点対称にして、他の回答を探す方法も、試みられそうでしたが、
やめときました。
歳のせいですかネ(71歳)。
暑いからでしょうか…。
ごめんなさい。
この項 終わり























