この記事について
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やコンピュータ内部の学習は行なっていたので、プログラミングに対する理解度はそこそこ上がっていたと思います。また、これまでの挑戦と違い、過去問を解くようにしました。精進グラフを見てもらうとわかりますが、この頃にグラフが跳ねてます。笑
やったのは、以下のサイトを埋めることです。
現在はこんな感じです。
rustを使い始める
3度目の挑戦の前に、以下のサイトでrustを学びました。rustを学び始めたのはAtCoderやるためではなく、ただ新しい言語を学ぼうと思っただけです。
3度目の挑戦自体はC++を使って始めました。しかしrustのメモリ安全性、将来性に惹かれてrustを使ってみようと思いました。
rustを使い始めてからは、レーティングの上昇が緩やかになりましたが、なんとか茶色に到達しました。
rustを使ってAtCoderに参加するためにcargo-competeを使わせてもらっています。
rustでAtCoderをやることについて
rustの方が安全性が高く将来性があると思ってrustを使っていますが、AtCoderのみをやるならあまり向いていないと思います。以下、rustを使うことについて、メリットとデメリットを書いていきます。
メリット
- メモリに関するエラーが起きないので、ロジックのバグ取りに集中できる
- VecやIter等のメソッドが豊富
- 実行速度が速い
デメリット
- 所有権の問題でプログラムを書くのが遅くなる
- AtCoderではcrateのバージョンが固定されているため、バージョンを覚えておく必要がある
- rust特有の概念を理解する必要がある
特有の概念とは所有権や参照などです。
以下のようにブログにまとめています。
最後に
結局、どの言語使うとかより、問題を解く習慣をどう作るかの方が大事な気がします。問題を解くのが習慣になると、レートが上がりやすくなった気がします。(気がするばかりですね。笑)
習慣を作るには、「やることを決めておく」ことが大事だと思います。。
やることを決めておいてくれるAtCoder Problemsはおすすめです。(自分でやることを決めている方はそちらを優先する方がいいと思います。)
ということで、次は緑色を目指します。
そのために、一旦AtCoderProblemsをやめて、以下の問題を解いていこうと思います。
コメント