「私がどうやってプログラムコンテストの問題を解いているか」の編集履歴(バックアップ)一覧に戻る

私がどうやってプログラムコンテストの問題を解いているか - (2013/09/14 (土) 03:51:24) のソース

会津大学オンラインジャッジやプロジェクトオイラーや北京大学オンラインジャッジ等のサイトにはプログラマ向け練習問題が載っています。
会津大学オンラインジャッジでは私はsinapusu2002として登録して、投稿されたコードのうちもっとも早く動くコードで問題を解いたり、問題正答数ランキング上位30位以内に入ったりしました。


私は若い時引きこもりだったため、義務教育レベルすら満足に受けていません。

そんな私がプログラマ向け国際大会の過去問をトップクラスのコードで解けるのか?
そんなこと関心がないのが世の中の99.999、、%だと思いますが疑問に思う方も一人くらいは世の中にいるかもしれません。
カンニングでしょうか?
確かに5%ほどの問題はカンニングして解いた問題があります。
しかしこのカンニングは練習問題に不慣れな時期に行ったカンニングで、慣れてきてからはほとんど自力で解いています。


私の解き方ですが。
問題分で要請される処理を仕事とみなすのです。
もし自分が毎日この問題を手作業で解く立場に置かれたら?
自分がCPUになった気分になれば、無駄な処理の多いコードや馬鹿な処理を要求するコード何か実行したくもないだろうなと考えます。

毎日の仕事となればどんなに頭の悪い人間でも、手慣れてきて要領がわかったり時間短縮や無駄な処理を省く工夫をすると思います。
こういう立場で問題を見ると問題が結構するする解けたりするものです。

また学がないので問題のなかで徹底的に当たり前のことを探す。
これにつきます。
というか私の解き方は学がないのでこれしかないのです。



問題について一日中考えているわけではありません。
時折問題を眺めてのんびり3日も考えれば答えが出ます。
無意識が勝手に考えてくれるのをまっているわけです。

一応答えの求まった最終段階から逆算して処理を記述するとか、無駄な処理や参照の発生しない順序集合をつけて処理やデータを並べるとか色々小手先テクニックはありますが基本これだけ。
問題の中で当たり前に言えることを徹底的に探す。
これが最も効果的です。

優秀なかたから見ればプロコンの問題は簡単すぎてやる気が起きないかもしれませんが、学のない私には知的興奮をもたらし結構楽しく解いています。
この勉強が仕事につながればいいのですがそれはちょっと無理そうです。

ソフトウェア作りは大きな建築に参加するのに似ています。
建築会社に入って流れの中で大きな建築の仕事をする能力(ソフトウェア会社に入る)と日曜大工(私のようなホビープログラマ)では覚えてる技能の方向性が全く違うのです。

なので普通のプログラマが解けない奇問難問を解けても残念ながら仕事には結び付かなさそうです。


ページ記述者
兵庫県加古川市加古川町南備後在住の森元さんからひたすら笑い物だよと言われている堀江 伸一こと私の記述でした。