AtCoder を始めるための記事
の冒頭で、C++ 以外の言語で競技プログラミングを始めるための入門資料たちをまとめていたのですが、長くなって来たのでこちらに分けました。
はじめに
競技プログラミングサイト AtCoder の特長の 1 つに 50 以上もの言語が使えることが挙げられます:
特に ABS (AtCoder Beginners Selection) には標準入出力方法から基本文法までを確認できる易しめの問題たちが集められているので、なにか新しい言語を覚えようと思ったときに手っ取り早く入門できる魅力があります。どの言語でも標準入出力のところでつまずきがちなのですが、以下にまとめた記事たちがとても参考になると思います:
言語別の競技プログラミング入門資料たち
それでは各言語別の入門資料たちをまとめて行きます。
Python
最近は Python で競プロを始める人が激増しています!
データ分析や機械学習において Python がメジャーな言語となったことから、Python を学びたいという方は大勢いるでしょう。Python を勉強したいというモチベーションで AtCoder を始める方も多いと聞きます。計算実行速度の観点からは C++ に比べて不利な感があるので、ARC E 問題以上の難易度に挑むようになったら C++ などの速い言語も覚えていく必要が生じますが、AtCoder 500 点問題までの難易度帯であれば概ね通せるようです。今後 Python で書かれたアルゴリズム解説資料などが充実して行くといいなと思います。
- AtCoder に登録したら解くべき精選過去問 10 問を Python3 で解いてみた (ながたさん)
- AtCoder に登録したら解くべき精選過去問 10 問を Python3 で解いてみた (@edad811 さん)
- Pythonで競技プログラミングする時に知っておきたいtips (Python2 系, @lethe2211 さん)
- Pythonで競プロやるときによく書くコードをまとめてみた (Python3 系, @y-tsutsu さん)
Ruby
AtCoder 上の多くの問題で Shortest をとっているコードは Ruby で書かれているイメージがあります。
- AtCoder に登録したら解くべき精選過去問 10 問を Ruby で解いてみた (@d_nishiyama85 さん)
- AtCoderの精進問題集10問をRubyで解いてみた。 (はむへいさん)
- Rubyで競プロするときのTips (アルメリアさん)
- Rubyで競技プログラミング (okaduki さん)
- Rubyで競技プログラミング (yhara さん)
- AtCoderで見かけたRubyショートコーディング術 (@syumai さん)
Java
蟻本著者の 1 人である wata さんは Java 使いでした!
計算実行速度は C++ よりやや遅い程度で、不利というレベルではありません。競プロ的には BigInteger が使えるメリットもあり、普段は C++ を使う人でも多倍長整数を扱いたいときには Java を使うという人も多いでしょう。なお、AtCoder / AOJ では C++ Boost ライブラリが使えるようになったため、C++ でも多倍長整数を扱えるようです。
C#
みなさんご存じの AtCoder 社長 Chokudai さんは C# 使いです。チーター本は C# による競技プログラミング入門資料としても知られています。
C
C++ まで進むのが大変な方のために。
Fortran
その昔、C の登場前には数値計算用言語として主流でした。現在も Fortran で書かれた数値計算コードは数多く存在します。
- AtCoder に登録したら解くべき精選過去問 10 問を Fortran で解いてみた (yukiutaai さん)
D
競プロ界で D 言語が大流行したときもありましたね!解説記事も充実しています。
- AtCoder に登録したら解くべき精選過去問 10 問を D で解いてみた (竹雄さん)
- AtCoder に登録したら解くべき精選過去問 10 問を D 言語で解いてみた - D 言語の構文と標準ライブラリを使い倒す編 (Yousack さん)
- 競技プログラミングのためのD言語 (1/2) (cafelier さん)
- 競技プログラミングのためのD言語 (2/2) (cafelier さん)
Rust
コアなファンの多い Rust です!
@tubo28 さんの記事のおかげで、多言語で競プロを始めるための資料たちが充実して来ました!
Rust は標準入出力部分だけでも様々な工夫の余地があるみたいですね。計算実行速度も速いイメージがあるので競プロ適性も高そうです。
- AtCoder に登録したら解くべき精選過去問 10 問を Rust で解いてみた (@tubo28 さん)
- Rust の標準入出力は(何も考えないで使うと)遅い (@tubo28 さん)
- Rustで競技プログラミング スターターキット (@hatoo@github さん)
- Rustの競プロ向け入力関数やマクロを高速化できるかやってみた (@tatsuya6502 さん)
Go
Go は実行速度が速いので実践的なアルゴリズムたちが実装できそうですね!
- AtCoder に登録したら解くべき精選過去問 10 問を Go で解いてみた (@ktateish さん)
- Goで始めるAtCoderのススメ(初心者向け) (@syumai さん)
- Go 言語で標準入力から読み込む競技プログラミングのアレ --- 改訂第二版 (@tnoda_ さん)
- Goでお手軽に行列の積を爆速並列計算 (@hamadu さん)
Nim
Nim も Python のようなシンプルな構文でありながら、実行速度が速いですね!
- AtCoder に登録したら解くべき精選過去問 10 問を Nim で解いてみた (@Kutimoti_T さん)
- 至高の言語、Nimを始めるエンジニアへ (@rigani さん)
- 競技プログラミングのためのNim (@ishowta さん)
Crystal
Nim が C 並高速計算実行のできる Python なら、Crystal は C 並高速計算実行のできる Ruby という感じでしょうか。
Haskell
Haskell は標準入出力が難しいイメージがありますが、入出力から丁寧に解説した記事たちがあります!
- AtCoder に登録したら解くべき精選過去問 10 問を Haskell で解いてみた (@hsjoihs さん)
- 「AtCoder に登録したら次にやること」を初心者がHaskellでやってみる (@moriiforfun さん)
- Haskellで競技プログラミング IO編 (@siquare さん)
- Haskell競技プログラミング入門 (@myuon_myon さん)
Scala
Scala は Haskell に比べるとやりやすそうです。
- AtCoder に登録したら解くべき精選過去問 10 問を Scala で解いてみた (@kgtkr さん)
- 競技プログラミングにおけるScalaの標準入力を楽にする (@cohalz さん)
- Scala競技プログラミング(入出力、型、参考URL) (@lranran さん)
- ScalaでAOJ (@TobiasGSmollett さん)
F#
関数型言語ですが .NET Framework 向けということもあって面白い言語ですね。
- AtCoder に登録したら解くべき精選過去問 10 問を F# で解いてみた (@kuuso1 さん)
- AtCoder に登録したら解くべき精選過去問 10 問 (AtCoder Beginners Selection) を F# で解く:別解 (はむ吉さん)
Common Lisp
ついに Lisp も出ました。
Hy
Python で書かれた Lisp ですね。
Scheme
Lisp 系言語の中で速い方のようです。
OCaml
関数型言語としてはかなり高速に動作するので競プロ向きかもですね。
Standard ML
OCaml と祖を同じくする、強い静的型付きの純粋ではない関数型言語ですね。
Clojure
関数型の書きやすい言語の 1 つですね。
- AtCoder に登録したら解くべき精選過去問 10 問を Clojure で解いてみた (@fireflower0 さん)
- Clojure を使える online judge まとめ (@lesguillemets さん)
Kotlin
Kotlin は Android アプリ開発言語として知られていますが、競プロにおいても ICPC 世界大会で使えるようになったことで注目度が上がっている言語です。JVM 言語の一つで Java と同等の実行速度を持ちつつ、簡潔なコードを書くための文法機能が充実していることが魅力です。 (YMATSUX さんより)
- AtCoder に登録したら解くべき精選過去問 10 問を Kotlin で解いてみた (YMATSUX さん)
- Kotlinで競技プログラミングをしてみたらめっちゃ快適だった話 (@naoppy さん)
Swift
現状 AtCoder の Swift バージョンは古いですが、きれいに対応してくれた記事が登場しました!
- AtCoderに登録したら解くべき精選過去問 10 問を Swift で解いてみた (@cielavenir さん)
- Swiftで競技プログラミング (@y_mazun さん)
- Swiftで競プロ入門 (@simorgh3196 さん)
- Swift2.2で競技プログラミング(AtCoder) (@S_Shimotori さん)
Objective-C
JavaScript
JavaScript でも入出力ができます。
- AtCoder に登録したら解くべき精選過去問 10 問を JavaScript で解いてみた (@mochi8k さん)
- 競技プログラミング用のJavaScriptテンプレートを作った (@chuck0523 さん)
CoffeeScript
JavaScript を書きやすくするために生まれた言語ですね。
Perl
Perl6
第 8 問: Otosidama の解説が面白いです。
PHP
PHP は Web 開発でよく使われているイメージですが、PHP で競プロやるのも面白そうです。
VB.Net
Pascal
Octave
Matlab とほぼ互換性のある言語ですね。
Julia
Julia は数値計算に強いイメージがありますが、色んな要素を併せ持った言語ですね。
- AtCoderに登録したら解くべき精選過去問 10 問を Julia で解いてみた (@lcolaholicl さん)
- Juliaで競技プログラミング(AtCoder)やるときのTips (@phigasui さん)
Lua
Lua も色んな要素を併せ持った言語ですね。
- AtCoder に登録したら解くべき精選過去問 10 問を Lua で解いてみた (Nobuyuki さん)
PostgreSQL
- AtCoder に登録したら解くべき精選過去問 10 問を PostgreSQL で解いてみた (nkhrlab さん)
COBOL
COBOL でやるのは難しそうなイメージがありましたが、ついに登場しました!
Elixir
Piet
難読言語です!
- AtCoderに登録したら解くべき精選過去問 10 問を難読言語 Piet で解いてみた (basemusi さん)
Whitespace
難読言語です!
Hexagony
難読言語です!
- AtCoder に登録したら解くべき精選過去問 10 問を Hexagony で解いてみた(問題解説編) (@rsk0315_h4x さん)
- AtCoder に登録したら解くべき精選過去問 10 問を Hexagony で解いてみた(言語解説編) (@rsk0315_h4x さん)
Brainf*ck
有名な難読言語です!
- AtCoder に登録したら解くべき精選過去問 10 問を Brainf*ck で解いてみた (@koi_kotya さん)
- 競技プログラミングで、Brainf*ckが少し使えた気になった話 (@bakaming さん)
Bash
すごく面白いです!
- AtCoder に登録したら解くべき精選過去問 10 問を Bash で解いてみた (@cympfh さん)
- AtCoderに登録したら解くべき精選過去問 10 問を bash で解いてみた (@yuizumi さん)
- bash で始める競技プログラミング(?) (@yuizumi さん)
- ABC を bash で解いた話 (yuizumi さん)
AWK
AWK も色んなことができます!
MoonScript
Prolog
Scratch
個人的に、Scratch で AtCoder に取り組めるというのは、将来的に大きなムーブメントを引き起こしうると感じています!