AtCoderで水色になりました

AtCoder

先日のキーエンスコンテストで過去最高パフォ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年版 福嶋先生の集中ゼミ

うかる! 基本情報技術者 [午後・アルゴリズム編] 2019年版 福嶋先生の集中ゼミ- 漫画・無料試し読みなら、電子書籍ストア BookLive!
【試し読み無料】※この商品はタブレットなど大きいディスプレイを備えた端末で読むことに適しています。また、文字だけを拡大することや、文字列のハイライト、検索、辞書の参照、引用などの機能が使用できません。 【基本情報技術者試験】の【午後試験】で求められる「アルゴリズム分野」のテキストです。 文系初学者・プログラム未経験者...

この本を数日かけて読んで、アルゴリズム面白い!となっていた所に、ちょうどLillianさんの転職記事がバズっていて、記事の中で触れられていたAtCoderなるサービスに興味をもったというのが、競技プログラミングを始めることになった経緯です。

ちなみに、上記の本を読むことで、配列の要素が増えたり・減ったり・時には入れ替わったり、あるいは変数が更新されたり、条件分岐されていく様子を頭の中でトレースしていく感覚が身につきました。

データの動きを頭の中で正確にイメージするというのはすごく基本的かもしれませんが、競技プログラミングにおいても非常に重要なことかなと感じているので、非情報系で競技プログラミングを始めたばかりの方は蟻本などの有名な本の前に、上記のような本を読んでみてもいいかなと思います。

AtCoder参戦と精進

Lillianさんの記事を読んですぐにAtCoderに登録しました。登録した日がちょうどコンテスト日だったので、チュートリアル問題をいくつか解いてからABC136に参戦しましたが、結果はAB2完で惨敗でした。5000人中4000位くらいで、非常に悔しかったです。逆に言えば最初2完だったとしても精進すれば水色までこれるということですね。

ここから今までにやってきた精進は以下のような感じです。

  • けんちょんさんのQiita記事を読む&リンクの問題も解く
  • AtCoderのコンテストにでれるだけ出る&解けなかった1問あるいは2問を解説参考に解く
  • ABC過去問を最近のものから順番に解く

けんちょんさんの記事

蟻本や螺旋本などの有名な書籍もありますが、私がAtCoderをはじめて最初に勉強したのは、けんちょんさんのQiita記事です。というか体系的に勉強したのはこの記事だけで、蟻本はいまだに買っていません。(機械学習や統計の勉強が一区切りついたら買う予定ですが、いつになるやら・・・)

特にしっかり読みこんだのは以下の5記事で、面白い!すげー!など日々感動しながら記事を読ませていただきました。

AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiita
NTT データ数理システムでリサーチャーをしている大槻 (通称、けんちょん) です。 好きなアルゴリズムは最小カットやマッチングですが、会社ではなぜか「DP が好きな人」と呼ばれています。今回は、最近注目度が急上昇している AtCod...
AtCoder 版!蟻本 (初級編) - Qiita
0 はじめに プログラミングコンテストチャレンジブック (通称、蟻本) は日本の競技プログラミングの普及に多大な貢献を果たしています。多くの競技プログラマたちが蟻本を手に取りながらコンテストの世界に没入して行きます。しかしながら...
動的計画法超入門! Educational DP Contest の A ~ E 問題の解説と類題集 - Qiita
0. はじめに: 非常に素敵な DP の入門コンテンツ 待ちに待ったコンテストの到来です!!!!! DP (動的計画法) はアルゴリズムの登竜門というべき難所ですが、いくつか問題を解いて行くとパターンのようなものが見えて来ます...
BFS (幅優先探索) 超入門! 〜 キューを鮮やかに使いこなす 〜 - Qiita
0. はじめに メジャーなグラフ探索手法には深さ優先探索 (depth-first search, DFS) と幅優先探索 (breadth-first search, BFS) とがあります1。このうち DFS については ...
DFS (深さ優先探索) 超入門! 〜 グラフ・アルゴリズムの世界への入口 〜【前編】 - Qiita
0. はじめに --- グラフ探索の動機 現代ではコンピュータはとても身近なものになりました。コンピュータの用途としては シミュレーションなどの大規模計算を行う 人工知能をつくる アプリを開発する などなど多様なものが考...

個人的にグラフ理論がすごく面白くて、化学構造式もグラフっぽい!と思って調べてみらまさにその通りで、化学と情報科学の結びつきを実感した瞬間でした。

コンテストに出る& 解けなかった問題を解説聞いて解く

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月までに青!&蟻本買って読む!

コメント

タイトルとURLをコピーしました