僕は四捨五入すると50歳になるおっさんであるが、いわゆる教科書的なアルゴリズムを真面目に勉強したことがなかったので、ちょいちょい本を読んだりコードで実装してみたりしている。
そしてAtCoderに流れ付き、少し時間を使って楽しませてもらった。といっても子供の面倒をみる時間が断続的に発生する生活なので開始時間が決まっている競プロのコンテストに出場するような形ではなく、過去問をのんびりと解くスタイル。
AtCoderを使わせてもらって本当に驚いたのが、この過去問で勉強するスタイルが無料で可能だということ。多くの言語がサポートされているし、他人の回答を見ることができる。同じ問題をまったく違うアプローチで解く人のコードを見ると面白いし、何より勉強になる。また、コードが消費する時間やメモリのリソースがかなり正確に計測されるので、こちらも実際の業務のコードを書く上で役に立つ。普通にかなり課金したいサービスである。
さて本題だが、ある程度AtCoderでやってみたのだが、壁にぶつかった。なかなか解けない問題で、なぜ解けないのかがわからないのだ。提出したコードが最初の3つくらいは問題ないが、そのうちTLEとなってしまうようなパターンが多い。おそらく根本的に別のアルゴリズムで計算量を少なくする必要があるのだろうが、このTLEとなる際の入力が秘密の情報であるため、それを推測してみて自分のコードで試す、というサイクルがなかなか廻せない。
僕はもう20年以上仕事でプログラミングをしているが、いわゆるデバッグ作業では、再現性があればかなり楽だが、再現性がないともう諦めたくなるくらい難しくなる。いわゆる「エスパーする」みたいなノリになる。
AtCoderで自分のコードが途中でTLEになるのは、僕の印象では「再現性がないデバッグをしている」ような形になる。手元で、そのアルゴリズムが遅い状態で動かせないのだ。
もちろん頑張って想像し、問題を起こす(TLEになる)ようなデータを自分で探り当てることも何度かやったが、異常に時間がかかってしまうし、心が折れやすい。
ということで、以下のような僕にとって都合がよいアルゴリズム勉強サービスを探している。
- 自分のコードをアップロードすると勝手に動いてくれて採点してくれる
- テストが失敗した場合はその入力を見ることができる
- Javaで提出できる(w
だれかそういうの知ってたら教えてください…
あるいは、サービスではなく、手元のマシンで動かすような問題集(データを自分でダウンロードするようなもの)でもいいかも。