rustを使ってAtCoder茶色になりました!

rust

この記事について

AtCoderでは色が変わると記事を書くことが許されるということで、いわゆる色変記事を書きます!「rustを使って」と書いていますが、実際にrustを使ったのは直近6回です。6回も使っていれば「rustを使って」と書いてもいいと思います(自己判断)。茶色になるまでに1年5ヶ月もかかりましたが、その間の2度の挫折についても書いていこうと思います。

まずレーティンググラフ

そして精進グラフ

2回挫折しました。笑

始めてから1度目の挫折をするまで

最初はPythonを使っていました。Pythonは大学院の時の研究で使用したことがあり、そこそこ使えたからです。と言っても、今思えば「書けるだけ」でした。なんとなく文字列の処理ができるくらいで、numpyなどのモジュールもあまり使えませんでした。

実行速度問題にぶつかる

Pythonを使っていると、TLEする問題にぶつかることがありました。多分numpyを使えばTLEせず解けるのだと思いますが、ここで「Python遅いからC++を使おう」という結論に至りました。解説にC++使ったものが多く、Pythonで同じように実装してもTLEするのです。。

C++使えない壁にぶつかる

もちろん、C++使えませんでした。笑

そしてこの頃は、VecやStringがどのように動いているかが何もわかっていなかったので、ストレスが溜まりました。そして挫折を迎えます。

2度目の挑戦から再び挫折するまで

2度目の挑戦と言っても、3回しか出場していないので挫折と言っていい微妙なところですが、記録上は挫折です(自己判断)。精進グラフを見ても分かるように、2度目の挑戦まで特に問題も解いていません。つまり、実力も上がっていないので、再び挫折を繰り返すことに。。

3度目の挑戦

2022年11月から3度目の挑戦を始めました。3度目の挑戦までに、VecやStringの動きをC++で実装して、理解を深めました。この間、CPUやコンピュータ内部の学習は行なっていたので、プログラミングに対する理解度はそこそこ上がっていたと思います。また、これまでの挑戦と違い、過去問を解くようにしました。精進グラフを見てもらうとわかりますが、この頃にグラフが跳ねてます。笑

やったのは、以下のサイトを埋めることです。

AtCoder Problems

現在はこんな感じです。

rustを使い始める

3度目の挑戦の前に、以下のサイトでrustを学びました。rustを学び始めたのはAtCoderやるためではなく、ただ新しい言語を学ぼうと思っただけです。

The Rust Programming Language 日本語版 - The Rust Programming Language 日本語版

3度目の挑戦自体はC++を使って始めました。しかしrustのメモリ安全性、将来性に惹かれてrustを使ってみようと思いました。

rustを使い始めてからは、レーティングの上昇が緩やかになりましたが、なんとか茶色に到達しました。

rustを使ってAtCoderに参加するためにcargo-competeを使わせてもらっています。

https://github.com/qryxip/cargo-compete/blob/master/README-ja.md

rustでAtCoderをやることについて

rustの方が安全性が高く将来性があると思ってrustを使っていますが、AtCoderのみをやるならあまり向いていないと思います。以下、rustを使うことについて、メリットとデメリットを書いていきます。

メリット

  • メモリに関するエラーが起きないので、ロジックのバグ取りに集中できる
  • VecやIter等のメソッドが豊富
  • 実行速度が速い

デメリット

  • 所有権の問題でプログラムを書くのが遅くなる
  • AtCoderではcrateのバージョンが固定されているため、バージョンを覚えておく必要がある
  • rust特有の概念を理解する必要がある

特有の概念とは所有権や参照などです。
以下のようにブログにまとめています。

最後に

結局、どの言語使うとかより、問題を解く習慣をどう作るかの方が大事な気がします。問題を解くのが習慣になると、レートが上がりやすくなった気がします。(気がするばかりですね。笑)

習慣を作るには、「やることを決めておく」ことが大事だと思います。。

やることを決めておいてくれるAtCoder Problemsはおすすめです。(自分でやることを決めている方はそちらを優先する方がいいと思います。)

ということで、次は緑色を目指します。

そのために、一旦AtCoderProblemsをやめて、以下の問題を解いていこうと思います。

レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】 - Qiita
0. はじめにレッドコーダーが教える、競プロ・AtCoder上達のガイドライン【初級編:競プロを始めよう!】からの続きです!!!中級編から読む方へ近年、AtCoder を中心とした競技プログ…

コメント

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