きしだのはてな このページをアンテナに追加 RSSフィード

2012-04-10(火) プログラマが解くのに1時間かかるという問題が普通にプログラマな方

プログラマが解くのに1時間かかるという問題が普通にプログラマな方法で5分で解ける話 20:41 プログラマが解くのに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分。


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

10231023 2012/04/10 20:58 だからなに?
プログラマーはリラクゼーションで一人ムキになって、場をしらけさせるタイプだと証明したかったの?

nowokaynowokay 2012/04/10 21:08 1023さんがプログラマなら、その証明に一役買っていますね。

sai5sai5 2012/04/10 21:21 連立方程式を解くところは純粋にロジックですが、
「なんらか数字に割り当てられた数を足すんだろう」というところはロジックと全く関係ない直感なので、
第一印象でその方針で行こうと思わなければ、時間を食ってしまうのは珍しくはないのではないでしょうか。

DekosukeDekosuke 2012/04/10 21:27 なぞなぞなので思いつけば解けるし、思いつかなければ解けないのでは

sinsin 2012/04/10 21:38 高学歴な人が1時間というヒントは、全くその通り数学的な手法も存在している事を暗示しているのだと思います。
sai5さんもおっしゃられておりますが、連立方程式で解くという方法に試行が及ぶのには時間がかかりますよね。
イロイロ試した結果馬鹿げた手法だけどやってみるか?と行き着く先があるとしたらだいたい解くまでに1時間かかるんじゃないかという出題者の予想がそこには組み込まれていると思います。(ある意味どこかの入試問題に似ています)

直感で出来る事をなんでこんなにもばかばかしく大げさにやるのかなんて指摘する人がいますが、小難しく考えてしまって解けない人間は確かにいます。私もその一人でした。
そういう人がたどり着くためのヒントも出題者は用意してあるのにムキになって否定する人がいるところを見るとやはりバカ発券機の一つのいい材料にはなるのではと思いました。

nowokaynowokay 2012/04/10 21:43 ここのは、実際に何が足されてるかまではわからなくていいって話ですね。

通りすがり通りすがり 2012/04/10 21:44 > sai5さん、
全く同感。
解が和で与えられるという点も何らかのロジックで自動で導き出せれば良いのですけどね。

統計処理で解くという記事がありましたけど、他の手法、例えば機械学習とかニューラルネットワークとか、誰かそういうので解いてくれないかなぁ。

kourindrugkourindrug 2012/04/10 21:56 なぞなぞとしては、最初の4つぐらいの式を与えるだけでもいいんですよね

papa 2012/04/10 22:08 2581 -> f(2)+f(5)+f(8)+f(1)がちょっと飛躍が大きいかも。すぐ和だと類推できるかな。

PGPG 2012/04/11 01:07 俺も普通に連立方程式で解いた
1時間かかるってのはどう考えても盛りすぎだよね
正面から解いても5分くらいじゃないの

lvllvl 2012/04/11 13:33 この問題を解くのに1時間かかる大人は幼稚園児がすぐに解けたと知っていたら違った結果になりうるという視点が足りない
「問題が英語なので語呂合わせではない」より後の思考ができないからこそ1時間かかりうる

何が言いたいかというと話題になった状態で知った人が1時間以内に解けたか否かでどうだというのは
話の種にするならまだしもきちんと考えるのであれば比較になっていませんよと

jojojojo 2012/04/11 13:39 面白いですが結果的に答えが出ただけで、人のクイズにプログラム的要素はなじみませんよ。
要件定義が漠然としすぎてますから。1桁?加算?変数置換?右辺は数値?10進数?

頭が良すぎて仕事が片付かないのが分かります。

yukimatuyukimatu 2012/04/11 13:53 プログラマが1時間かかって就学前の子どもなら5分で解けるっていう理由がまさにこれ。
理論的に計算すると時間がかかる。数字に含まれる◯の数を数えるだけなのにね。
「就学前の子どもでも」という要は幼稚園児でも答えがだせる。そう考えれば答えはシンプルなはず。

さるさる 2012/04/11 14:25 幼稚園児がこんな解き方したらキモイですね。
アプローチが間違ってます。

答えは偶然あってますが・・・

nowokaynowokay 2012/04/11 19:41 まあ、一番頭使ったのは、最初のコメントへの返しですね。

gui1964gui1964 2012/04/11 20:48 「正しい解のひとつ」ではあるかも知れないけれど、クイズの正解には辿り着いてないような気がするのは気のせいでしょうか?

bb 2012/04/12 00:27 これっって数字の字に含まれる○の数じゃないんですか_?
0=1 1=0 2=0 3=0 4=0 5=0 6=1 7=0 8=2 9=1

nowokaynowokay 2012/04/12 01:39 4については問題にでてこないので、わからないですよ

assbassassbass 2012/04/12 11:07 ・「幼稚園児が5〜10分で解ける」という情報を使っている
・「なんらか数字に割り当てられた数を足す」を直感的に導いている

結局、「幼稚園児が解けるんだから絵として捉えるんだろう」というのと変わりませんね。
おそらく「1時間かかった大人」が持たなかったであろう情報(未就学児が5分で解ける)を使って直感的にルールを仮定しているわけですから。

結局のところ、普通の回答と違うのは各数字の割り当てを連立方程式で解くという部分だけですが、連立方程式を使うのがそれほど「プログラマ的」だとも思えません。

jj 2012/04/12 11:38 「就学前の子どもでも」というヒントが極めて大きいという事で、この解でも使っていますよね
そんな難しい操作をする訳が無いってわかる
ノーヒントなら、プログラマさんももう少し手こずってくれたんじゃないかしら
同じ数字四つの操作などに着目する事が必須かな

kk 2012/04/12 16:11 そのプログラムを書く時点で、ほぼ解法が分かっているのが前提かと。
プログラマ的に解くというより、判明した解き方をプログラマ的に書くとこうなった、なのでは。

明透明透 2012/04/13 11:32 まあ、これ2月には皆がエントリーにしていたネタですね。
これを岸田さんはプログラマー的にも簡単に解けるよという事が証明したかったと。
そういう事なんですよ。
幼児の気持ちになって"Closed loops"の数を数えて解きましたでも正解ですよ。
http://llwproductions.files.wordpress.com/2012/03/answer.jpg

通りすがり通りすがり 2012/04/13 12:22 システム系勤務ですが・・・
1分かからずに瞬殺でした。。。

プログラマーだからってプログラムで解こうとするあたりがSEじゃなくてプログラマーなんですね。。。
というか↑プログラムじゃなくてただの連立方程式のような気もしますが。。。

おとりすがりおとりすがり 2012/04/15 22:40 論点が違うというか、普通に大人のジレンマに嵌っている状態ですよね。
大人は知識のいらない問題にも知識を使おうとして余計な時間が必要になるという話なんだから。

暇 2017/12/06 20:35 gui1964   同感

トラックバック - http://d.hatena.ne.jp/nowokay/20120410