プログラマが解くのに1時間かかるという問題が普通にプログラマな方法で5分で解ける話

こういう問題が流れてきた。
まつひろのガレージライフ: 幼児が数分で解けるのに大人が解けない算数(?)の問題


「幼稚園児が5〜10分で解けるのに、プログラマなどの頭脳労働職の高学歴の方が解くのに1時間もかかる」とあるけど、これ1時間かかるの、プログラマとしてあまりよくないんじゃないのかなーと思った。
ので、プログラマ的に解いてみる。


改めて書き出すとこう。

8809=6 3333=0
7111=0 5555=0
2172=0 8193=3
6666=4 8096=5
1111=0 1012=1
3213=0 7777=0
7662=2 9999=4
9313=1 7756=1
0000=4 6855=3
2222=0 9881=5
3333=0 5531=0
5555=0 2581=???


問題は英語だし語呂合わせじゃない。幼稚園児にわかるということでそこまで複雑なルールでもない。なんらか数字に割り当てられた数を足すんだろう。画数ではないっぽい。ということで0-9を記号に当てる。

a:0 b:1 c:2 d:3 e:4 f:5 g:6 h:7 i:8 j:9


求めるのは2581なので

b+f+i+c

を求めるということになる。


んで、2,5,1はそれぞれ4つで0になる式がある。

1111=4b=0からb=0
2222=4c=0からc=0
5555=4f=0からf=0


結局、求めるのは8に割り当てたiの値。
直接は求められないので、8が含まれた、最初の式を使う。

8809=2i+a+j=6


ここで、aは、0000=4から

0000=4a=4、a=1


jは、9999=4から

9999=4j=4、j=1


となって、

2i+a+j=2i+1+1=2i+2=6
2i=4
i=2

が求まる。


よって、2581に対応する値は

2581=b+f+i+c=0+0+2+0=2

となって、2ということになる。


残りの式も、同様にあてはめていくと、このルールで整合するので、少なくとも正しい解のひとつということになる。
ブログ書きながらでも30分。


こういう、隠れた法則を探す作業は、バグによる変な出力から現象を探し出すのと同じなので、プログラマならむしろ慣れてるんじゃないでしょうか。