先日のキーエンスコンテストで過去最高パフォ1843!!をだし、ついに入水しました!!
嬉しくてなんどもプロフィール画面を覗いてしまうほどです。
せっかくなので振り返りも兼ねて、いままでやってきたことを残しておきたいと思います。
この記事のコンセプト
なんの変哲も無い一般人でも水色なら頑張ればなれるというメッセージ&ただの日記
私のスペック
バックグラウンド
田舎の公立中学校・高校をぼーっとしながら卒業し、そのまま地元の大学に入学して、今は有機化学を専門にした研究の仕事をしています。APIと聞いてまずでてくるのはActive Pharmaceutical Ingredient(医薬品原薬)ですし、HTMLとか見ても新しい縮合剤か何かか?となるタイプの人です。要するに数学つよつよの人でも情報科学つよつよの人でもないということです。
ただ、中学数学の規則性の問題や、高校数学の確率や数列の問題は好きでした。(あくまで標準的な教科書レベルの話ですが・・・)
問題の中に隠されたルールを見つけていく感じが謎解きをしているようで楽しかった覚えがあるのですが、競プロも似ているなぁと感じます。
ゲーム
尊敬するmaspyさんが書いていたので真似てみる。(上から新しい順、大した経歴はない)
- モバレジェ ソロミシック 余ってるロールをピックしてましたが、タンクが好き 勝率は6割ちょっとだったと思います。
- 囲碁 2, 3級くらい 通勤時間でコンピュータ相手に遊んでました
- スパスト4 当時PP3000ちょっと さくらを使ってました
- ぷよぷよ 中学生のとき地元で最強w(10連鎖組めるだけで神扱いされるレベルです、はじめてオンライン対戦した時の絶望は忘れられません)
割といろんなジャンルに手を出すタイプなんですが、振り返ってみると強さの指標があって競争するタイプのゲームはあまりやってなかったようです。しかもやってたとしても中途半端なレベル。。。
いつかFPS系のゲームかLOLをやりたいと思ってますが、時間がとれない。。。。
アルゴリズム入門
そもそものきっかけは、化学の研究者でもIT関連の知識をつけていった方がいいなぁと思って、基本情報技術者の資格でも取ってみるかと考えたことです。
午後の試験にアルゴリズム問題が出題されて、これが鬼門になるとのことで、以下の本を買って勉強をしてみました。なお、この時点(2019.8)でのプログラミング歴はProgateというプログラミング入門サービスとDjangoチュートリアルというwebアプリのチュートリアルで1~2ヶ月遊んだ程度です。
うかる! 基本情報技術者 [午後・アルゴリズム編] 2019年版 福嶋先生の集中ゼミ
この本を数日かけて読んで、アルゴリズム面白い!となっていた所に、ちょうどLillianさんの転職記事がバズっていて、記事の中で触れられていたAtCoderなるサービスに興味をもったというのが、競技プログラミングを始めることになった経緯です。
ちなみに、上記の本を読むことで、配列の要素が増えたり・減ったり・時には入れ替わったり、あるいは変数が更新されたり、条件分岐されていく様子を頭の中でトレースしていく感覚が身につきました。
データの動きを頭の中で正確にイメージするというのはすごく基本的かもしれませんが、競技プログラミングにおいても非常に重要なことかなと感じているので、非情報系で競技プログラミングを始めたばかりの方は蟻本などの有名な本の前に、上記のような本を読んでみてもいいかなと思います。
AtCoder参戦と精進
Lillianさんの記事を読んですぐにAtCoderに登録しました。登録した日がちょうどコンテスト日だったので、チュートリアル問題をいくつか解いてからABC136に参戦しましたが、結果はAB2完で惨敗でした。5000人中4000位くらいで、非常に悔しかったです。逆に言えば最初2完だったとしても精進すれば水色までこれるということですね。
ここから今までにやってきた精進は以下のような感じです。
- けんちょんさんのQiita記事を読む&リンクの問題も解く
- AtCoderのコンテストにでれるだけ出る&解けなかった1問あるいは2問を解説参考に解く
- ABC過去問を最近のものから順番に解く
けんちょんさんの記事
蟻本や螺旋本などの有名な書籍もありますが、私がAtCoderをはじめて最初に勉強したのは、けんちょんさんのQiita記事です。というか体系的に勉強したのはこの記事だけで、蟻本はいまだに買っていません。(機械学習や統計の勉強が一区切りついたら買う予定ですが、いつになるやら・・・)
特にしっかり読みこんだのは以下の5記事で、面白い!すげー!など日々感動しながら記事を読ませていただきました。
個人的にグラフ理論がすごく面白くて、化学構造式もグラフっぽい!と思って調べてみらまさにその通りで、化学と情報科学の結びつきを実感した瞬間でした。
コンテストに出る& 解けなかった問題を解説聞いて解く
AGCを含めて出れるコンテストには全部でました。Rateを上げるというよりは、実力をつければ自然とRateも上がるだろうという考えです。実力をつけるためにコンテストにはたくさん出た方がいいのは確実だと思います。
また、コンテスト中に死ぬ気で考えた方が問題の印象が強くなるので、その後の復習で新しい発想だったりテクニックを学んだ際に記憶に定着しやすくなるような気がしています。
いつも丁寧な解説をしてくださる、すぬけさんやりんごさんにこの場をかりて感謝申し上げます。(ちなみに私は最近まで解説してくれてる人の名前を知らなかった不届きものです)
ちなみに解説みても理解しきれなかった時は、考えるだけ考えたあと、どこまで分かってどこから分からないのか整理した上で、次の日など日を改めて考えるようにしてます。なぜかは知りませんが、日を改めるとすっきり理解できることが多いです。(たまにみかけますがコピペで通すというのは絶対にやらないようにしてます。)
また、どうしてもわからない時は例えば ABC150 E のようにググると解法を解説しているブログ等がみつかるので、いろいろな解説をみてどうにか理解を進めています。
ABC過去問を最近のものから順番に解く
コンテストに出る以外の普段の精進はシンプルで、ABC過去問を上から解いてるだけです。最近は公式バチャが実装されたのでそちらを利用しています。
精進する上でどんな問題を解くのが効率がいいのか?解説はみてもいいのか?などいろいろ議論になっているところではあると思いますが、難しいことを考えずに自分の好きなようにやればいいかなと思っています。面白くないと続かないですし・・・
私の場合、AtCoder ProbremsでTableを開いた時に全部緑で埋まっている方が綺麗だからという理由で、上から順番に解いています。(F問題は埋まっていませんが・・・あとGolfも)
また解説を見るタイミングですが、私は結構粘る方かなと思います。だいたい1~2時間は呻ってから見ることが多いです。なぜかと言われると難しいのですが、解法を考えていて、もう無理!となるまで私の場合はそれくらいの時間かかることが多いというだけかなと思います。
精進量としては、ABC80くらいまで終わったところなので、およそABC全体の半分を解いたくらいです。
解説を読む時の意識
普段数式を使ったり読んだりする人間ではないので、忘れてしまいそうになるんですが、1行の数式にはかなりの情報がつまっています。適当なネット記事や自分の専門分野の記事であれば、1行の文章として読んでいけばいいですが、その感覚で解説PDF等を読むとだいたいわけがわからなくなると思います。
なので、私は1行の数式や解説文を、本の1ページあるいは数ページにあたる情報としてゆっくり丁寧に読むようにしてます。
こんなんわかるか!と投げてしまわないためにも、もともと時間をかけないと読めない1行なんだと意識して読んだ方が精神的によいかなと感じます。
AtCoderをやってみた感想
楽しいですし、すごい人がいっぱいいて刺激を受けます。
社会人になって、いろいろ人生のイベントもありバタバタする中で、あまり熱中する趣味が見つかっていなかったのですが、いい趣味が見つかったなと思っています。
最初でも触れましたが、あまり競争性のあるゲームはやってきていませんでした。特に以前はTwitterなどもやってなく、すごい人を身近に目にするという機会も少なかったです。
世界は広いなぁと実感しつつ、はるか先をいく偉人たちに刺激を受けながら、次は青を目指して精進していきます。
まとめ
- AtCoder楽しい!
- 水色は頑張ればなれる!
- しのごの言わずに精進!
- 次の目標は2020年6月までに青!&蟻本買って読む!
コメント