やねう入社試験

について考えていた。
詳しくはやねうらお氏の日記見てください。

問い1 再帰を使った数学アルゴリズムの最適化。

まずは何をしている関数なのか解釈。
紙と鉛筆でごちゃごちゃ書いて関数の意味を理解。

問い2 迷路のステップ数を数える。

再帰は簡単。二行で書けた。
再帰が意外と難しい。しかも O(N^4)だし。
再帰のほうがプログラムとしては好きなんだけどなあ。

問い3 数学、訳わかんない。


解答をメールで送信した後に細かいことに気づいた。
再帰が再起になってた。orz
あと、明らかに無駄なところが…。
返信を震えて待つことにしよう。


結局、かなりの時間と手間を要したが何とか解けた。
しかし、やってみてまずは頭の中で方針を立てないといけない。
いきなりプログラムを書こうとするとそっちに気をとられてしまい、細かいことが見えなくなる。
で、まずはゆっくり考えるべくコンピュータから離れて電車に乗る。
昔から考え事をするときは 「馬上、便上、床上」つまり、乗り物に乗っているとき、トイレにいるとき、布団の中、といわれている。
というわけで、阪急に乗ってのんびり梅田へ。
普通でのんびり行きつつ、梅田に着くまでに考えをまとめる。


考え自体は三十分あれば十分にまとまる。
ただ、問題はそれをソースにする。ということだ。


まず、普通に授業を受けたり本を読んでいただけではありきたりなものしかかけない。
その結果、冗長な、長久手読みにくい、分岐や状況管理変数などが多用されるコードが出来上がる。
そこで、もっとスマートな解決方法をとらなければならない。
つまり、無駄の無い方法だ。


そういう方法はあまり情報がまとまっていないように感じるし、
何よりも普段から使っていないのでなれていない。
これがかなり大きく、予想外の結果を引き起こし、バグが見つかりにくくなる。
さらに経験と代償にかなりの時間を費やすことになってしまう。
そういう点を克服しないとよいコードを自然に書けるようにはなれ無いだろう。