YU2TA7KA's BLOG ~take one step at a time~

派生開発、組み込み開発周りのこと。

【Rust】茶色コーダーに到達【AtCoder】

はじめに

コンテンスト参加16回目でついに茶色コーダーになれました!
f:id:yuji-tanaak:20200505201906p:plain
2020年1月からコンテンストの参加し始めてようやくという感じです。良い機会なのでここまでの状況を整理しておきたいと思います。

モチベーション

2019年末くらいにAtCoderに出会い、精選10問(後述)を解いて面白いと感じたのが最初のきっかけです。また、Rustを勉強し始めててちょうど良い実装の題材になるとも思えました。趣味でプログラミングをする場合、題材探しがそもそも大変だったり、題材を決めても本質的でないところでつまずいたりでどうもしっくりこない感じがありました。そんなときに競技プログラミングに出会い、いままで続いています。

面白さ

いろいろな側面があるのですが、私が感じる面白さは以下になります。

  • 精進した分上達が数値で可視化され、達成感を感じやすい。良ゲー。
  • 自分のレベルに合わせて難易度調整がしやすく、達成感を感じやすい。音ゲーみたい。
  • 毎週コンテンストが開催され飽きない。適度なイベント開催頻度。
  • コンテンストは過去の自分との戦いであり、一緒に参加している人の競い合い。競争は緊張感があって楽しい。
  • 競プロ界隈Twitterの空気が心地よい。

精進

毎週末のコンテンストに向けて精進*1を重ねています。具体的には以下をやっています。

1. AtCoder Problemsのrecommendを解く

AtCoder の問題はAtCoder Problemsに整理されています。難易度確認や自分の解答状況など。機能の一つに自分のレーティングに合わせた問題の推薦機能があります。ここで推薦された問題を解いてます。

2. 競プロ参考書を読んだり実装したりする(今は螺旋本)

競プロ参考書がいくつか出ていて、それを読んでいます。PCに向かえない隙間時間とかに読んだり、参考書片手に実装練習したりしています。3冊並行して使っています。

タイトル 通称 コメント
プログラミングコンテスト攻略のためのアルゴリズムとデータ構造 螺旋本 メインで取り組んでいる本です。ソートやデータ構造の基本などから入っており自分のレベルに合っている気がします。
最強最速アルゴリズマー養成講座 プログラミングコンテストTopCoder攻略ガイド チーター本 電子書籍で購入したので、隙間時間にスマホでちょくちょく読み始めました。優しい文体でもっと読みたいという気持ちになります。
プログラミングコンテストチャレンジブック [第2版] ~問題解決のアルゴリズム活用力とコーディングテクニックを鍛える~ 蟻本 まだ自分のレベルではわからないところが多く、螺旋本のあとに再チャレンジ予定。今は螺旋本と比較参照に使っています。

3. けんちょんさんの記事をめっちゃ読む

ネットで競プロ関連の情報を探すとけんちょんさんの記事に到達します。どの記事も1冊の本のように丁寧で詳しい解説があり、めっちゃ読んでいます。そして、記事途中で理解が追いつかなくなり、どんどんスタックされています。めっちゃ読みます。
twitter.com

4. 参加コンテンストの復習(pdf,動画,他者解答の確認)

コンテンスト後には解答がpdfと動画で公開されます。学校の勉強と同じで復習します。面白いのは他者の解答も確認できるので、それもいくつか見るようにしています。他者解答はテクニックの宝庫で感動します。

5. 自分のレベルを把握する(実力より難しすぎる問題は寝かせる)

精進とは少し違うかもしれませんが、自分のレベルよりも2,3段くらい上と感じるような問題は寝かせるようにしています。その問題を解くために周辺知識を集めながら取り組むのも一つの手だと思うのですが、周辺知識を適当な理解で済ませて無理して解くよりも、下地となる周辺知識をちゃんと理解して改めて取り組む方が身につきやすいという考えです。そうした考えのもと「自分のレベルを把握する」ということも実は精進の一形態かなと思った次第です。

展望

先には緑色、水色、青色・・・とカラフルに並んでいて、今年中に緑に到達したいのが目標です。ただ競技プログラミングを始めて思ったのは、知らないアルゴリズムや実装テクニックなどが数多あるということです。理解していないけど、上のレベルで必要になるキーワードはたくさん目にしました。それらを格ゲーのコンボを修得すうような感じで、一つ一つ理解/実装できるようになりたいと素朴に思います。なので、緑を目指しつつ、ゲーム感覚で日々楽しく*2精進できればと思います。

AtCoder(競技プログラミング)に関して

AtCoder全く知らない方に向けて、簡単に紹介です。

AtCoderとは

競技プログラミングコンテストサイトです。毎週様々なコンテストが開催されています。
AtCoder社長の記事が詳しいです。
AtCoder(競技プログラミング)の色・ランクと実力評価、問題例 - chokudaiのブログ

AtCoder入門

qiita.com
百花繚乱!なないろ言語で競技プログラミングをする資料まとめ - Qiita
解いてみる、可能なら提出してACさせる。

おわりに

茶色に到達という切れ目が発生したので、ここまでの状況を整理しました。今面白いと感じていることをこれからも感じ続けられるように工夫しながら継続していきたいと思います。

現在できる実装の実力の俯瞰やRustで競技プログラミングやることの所感とかも書いても良かったかもですが、それはまた別の機会にでも。

*1:特に意識せずにこの単語を使っていたのですが、競プロ界隈では勉強することを精進と呼ぶ文化があるようです。

*2:楽しくないこともあるので、うまくマインドコントロールしつつ