🧊

LeetCodeのEasyな問題をぜんぶRustで解こうとしていた

けど、ここ最近あまり意義を感じていないことに気がついたので、キリ番になった記念にやめることにした。

いちおう節目としてメモを残しておく。

なぜはじめたか

単純に仕事の波が引きまくっていて、なんか有意義に時間を使えないか?と思い。アルゴリズムとかそういうCSの基礎的なところはあまり得意ではない意識もあるので、多少マシにはなるかな?と。

コンスタントに1日1-2問くらいを朝一番にやるのを習慣にして、去年の秋くらいからちまちまやってた。

なぜやめるのか

理由は2つ。

まずは、近頃はあまり学びがなく、これは惰性でしかないな・・と気付いたから。

Easyな問題だけをやってるがゆえにか、400問もやると問題の質が気になってくる。

  • 本質は単純なのに、説明文が無駄に難解なやつとか
  • ただの文字列操作やん・・みたいなのとか
  • 完全な使いまわしとか
  • Easyではない!っていうコメントが噴出してるやつとか

Rustの勉強も兼ねてやってたけど、構文も決まったパターンばかりになってきてたし。

あとは、モチベーションと時間の都合。

Mediumとか違うレベルに手を出すという手もあったかもしれんけど、モチベーション的なところで疲れを感じてたのもあるし、複業に時間を割くための優先順位の問題もあり。

結局、なんのために?っていうモチベーションの源泉がないのが問題かな〜。この手の知識が仕事で役に立ったこともないし・・。(計算量に気を使うとかそういうのは、もともとやってるし)

Rustへの感想

`Iterator`がすごく便利で感動した。`windows()`とか`chunks()`とかがなかったらそれはもう面倒くさかったはず。
メソッドチェーンでコード並べても、コンパイル時に最適化してくれたりするし。

ただ不便だと思うところもあって。

コードをどこで書く?ってなった場合に、LeetCodeのページ内エディタでちょっと書こうとするけど、だいたいコンパイルが通らないし補完もないしでだいぶ厳しい。

なのでだいたいローカルにテストケースをコピーしてきて動かせるようにしてたけど、`TreeNode`とかテストケースを用意するのがめちゃめちゃ面倒なやつとか、既に実装してあるプライベートなコード使って解けみたいなのとか、そういうのが本当にだるくて、Rustで解くのを諦めることもあった。

作問の都合か知らんけど、なんでも`Vec`でなんでも`String`でなんでも`i32`って感じなので、なんかずっとキャストしてたイメージある。

これはRustのせいっていうか、LeetCodeのせい。

まとめ

  • あまり勧められるやり方ではなかった
  • もっと良質な問題だけを、集中的にやるほうがいい
  • モチベーションが一番大事

また忘れた頃にやるか、もう二度とやらないか、どっちかな気がしてる。