Rustで始めるAtCoder あるいは AtCoderで始めるRust
- 2. Mobility Technologies Co., Ltd.2
話すこと
■ AtCoderってなに?
■ AtCoderをRustで始めると何が嬉しいの?
■ RustをAtCoderで始めると何が嬉しいの?
話さないこと(話せないこと)
■ AtCoderでランクを上げる方法
Agenda
- 3. Mobility Technologies Co., Ltd.
■ https://atcoder.jp/
■ 週一程度で開催される、与えられた問題を制限時間内に解くコンペ
■ 計算コストの制約(主に実行時間とメモリ)や入力の値の仕様が存在
■ 開催者が用意したテストケースを制約下で全て通過できれば正解
■ ブラウザ上で問題の閲覧・コードのテスト・コードの提出・結果の確認が可能
3
AtCoderって何?
計算コストの制約
入出力の仕様
←問題画面の一部
↑回答画面の一部
- 4. Mobility Technologies Co., Ltd.
周辺ライブラリが充実している
■ cargo-compete/atcoder AtCoder・競プロ向け便利コマンドツール
■ proconio 煩雑なRustの標準入力の受け取りを宣言的に記述可能
■ ac-library-rs 公式によるAtCoderでよく使うスニペット
■ その他使用可能なcrate itertoolsやnum crateは頻繁に使用
→ テストや提出以外の本質的な実装に集中できる環境が用意されている
速度・メモリ節約が優秀
■ ただし、支配的なのは言語の選択ではなくアルゴリズムの選択
■ たまにRustだと制限時間ギリギリで通った!みたいなこともあるが大抵悪手
■ とはいえ「これ別の言語なら通るんじゃない...?」という本質でないことに
思考を持っていかれなくて済む
■ 自分は最初はAtCoderに慣れるために言語に不安のないPython(pypi)を使ったが
アルゴリズムがあっていれば余裕を持って通る*
4
AtCoderをRustで始めるメリット
*pypiだとメモリ不足は稀によくある
- 5. Mobility Technologies Co., Ltd.
■ 過去問として様々な難易度の実装課題が大量に与えられる
■ 言語の構文を覚えた!なにか作って覚えよう
→ 作るものが思いつかずそのまま離れてしまう、を防げる
■ 配列やイテレータの操作・パターンマッチなどの基本処理を学べる
■ 同じ課題を同じ制約で書いている人のコードを大量に見ることが出来る
■ より速いコード・メモリ消費が少ないコードを大量に見ることが出来る
■ アルゴリズムが優れている
■ データの持ち方が優れている
■ ライブラリや構文等、Rustの良い使い方をしている
■ (良くわからない黒魔法でなにかを高速化している)
■ Rustを書きつつ、ついでにAtCoderもできる
5
RustをAtCoderで始めるメリット
- 6. Mobility Technologies Co., Ltd.
AtCoderをRustで始めると本質的な部分に集中できる環境が用意されているよ!
RustをAtCoderで始めると色んな難易度の課題が尽きないしいくつかの客観的な指標で
優れた他人のコードから学びを得ることが出来るよ!
早くランクを上げたい
まとめ
6