モルモルするぜ!

モルモルします。

競プロに使った言語が10言語になったので感想

なんでそんないっぱい使ったの?

  • 問題の種類によって使い分けるのがかっこいいと思ったから
  • 同じ言語ばっかり使ってると飽きるから

言語に求めたこと

  • 書きやすいこと、コードが冗長にならないこと
  • テスティングツールが使いやすいこと
  • 早いこと
  • できれば型も欲しい

以下使った言語一覧

C++

  • だいたい解答例はこれなのでとりあえず勉強した。
  • 特に言うことはない。みんなだいたい知ってるでしょ。
  • あえて特筆すると、文字列処理が難しいのとテストが若干使いづらいのが難点。

Java

  • そこそこ競プロで使われることが多いイメージがあったので使ってみた。
  • C++との差別化が難しく、どうしても情報量の差からC++の方が書きやすく感じた。

Rust

  • 人気だったので使った。
  • イテレーターが最高で、特に整数ベクターを扱う問題に強い印象。
  • コミュニティ全体として競プロに積極的で、有志による情報やライブラリが豊富(標準入力を行うライブラリが最強)。
  • 文字列を扱うときは冗長になりがち。

Go

  • 多分早いだろうと思って一旦使ってみることに。
  • 予想はしていたけど使いづらかった。
  • 「このメソッドがないの!?」と思うことしばし。

Python/PyPy

  • 解答例に記載されていることも多いので採用。
  • 文法がとにかく直感的で書きやすい。
  • 周辺ツールがモダンでUIもかっこいいものが多く、テンションがあがる。

Ruby

  • 遅いのはどうしようもないけどv3.0.0はまあまあ早いらしい(AtCoderは執筆時点でv2.7.1)から、未来に期待して使ってみた。
  • 便利なメソッドや省略記法が多くて書きやすい。

Julia

  • 数値計算で使ってみて良い感じだったので競プロでも採用。
  • 数学関数がデフォルトで豊富なのが便利で、Floatを扱うような問題に適している印象。
  • テストコードが簡単にかけるのが意外だったし、出力もわかりやすい。
  • 文字列処理が苦手な印象だったが、全然そんなことはなかった。

TypeScript

  • Web開発の方で使い慣れてるので使った。
  • 標準入力だけで一手間必要で、アルゴリズム実装以外の部分に時間がかかってしまう印象。
  • とはいえ、特に配列に対するメソッドが豊富で書きづらいわけではない。

C Sharp

  • LINQという文法がめちゃくちゃ便利だと布教されたので使ってみた。
  • 実際めちゃくちゃ便利ではあった。
  • 名前にCを冠する割には速度が遅かったのと、痒いところにギリギリ手が届かない言語仕様がなんとも愛らしい。

Kotlin

  • 人気だったので触れた。
  • どうせならと思いJetBrainsのIDEを使ってみたが、これがよくなかった。快適すぎた。

まとめ

  • ある程度メジャーな言語は使い尽くした(あとはPHP, Swiftくらい?)。
  • とりあえず、計算量が少なくて複雑なアルゴリズムも必要としない問題はRuby, 整数配列を受け取って処理するような問題はRust, 文字列処理がメインの場合はPython, 浮動小数点が出てくるような計算にはJulia, その他知らないアルゴリズムが必要な場合はググれば出てくるC++といった感じで5つくらいを使い回していこうと思う。
  • 本当は全部C++で事足りるんですけどね。ロマンも大事。