AtCoder
まとめ
AOJ
競技プログラミング
新人プログラマ応援

百花繚乱!なないろ言語で競技プログラミングをする資料まとめ

AtCoder を始めるための記事

の冒頭で、C++ 以外の言語で競技プログラミングを始めるための入門資料たちをまとめていたのですが、長くなって来たのでこちらに分けました。

はじめに

競技プログラミングサイト AtCoder の特長の 1 つに 50 以上もの言語が使えることが挙げられます:

特に ABS (AtCoder Beginners Selection) には標準入出力方法から基本文法までを確認できる易しめの問題たちが集められているので、なにか新しい言語を覚えようと思ったときに手っ取り早く入門できる魅力があります。どの言語でも標準入出力のところでつまずきがちなのですが、以下にまとめた記事たちがとても参考になると思います:

言語 記事 著者
Rust AtCoder に登録したら解くべき精選過去問 10 問を Rust で解いてみた @tubo28 さん
Python AtCoder に登録したら解くべき精選過去問 10 問 を Python で解いてみた ながたさん
C# AtCoder に登録したら解くべき精選過去問 10 問を C# で解いてみた @NotFounds さん
Java AtCoder に登録したら解くべき精選過去問 10 問を Java で解いてみた @0x841 さん
Kotlin AtCoder に登録したら解くべき精選過去問 10 問を Kotlin で解いてみた YMATSUX さん
JavaScript AtCoder に登録したら解くべき精選過去問 10 問を JavaScript で解いてみた @mochi8k さん
Haskell AtCoder に登録したら解くべき精選過去問 10 問を Haskell で解いてみた @hsjoihs さん
Go AtCoder に登録したら解くべき精選過去問 10 問を Go で解いてみた @kakko_hatena さん
Perl6 AtCoder に登録したら解くべき精選過去問 10 問を Perl6 で解いてみた @kotatsugame さん
D AtCoder に登録したら解くべき精選過去問 10 問を D で解いてみた 竹雄さん
Fortran AtCoder に登録したら解くべき精選過去問 10 問を Fortran で解いてみた yukiutaai さん
Standard ML AtCoder に登録したら解くべき精選過去問 10 問を Standard ML で解いてみた @fetburner さん
Nim AtCoder に登録したら解くべき精選過去問 10 問を Nim で解いてみた @Kutimoti_T さん
PHP AtCoder に登録したら解くべき精選過去問 10 問を PHP で解いてみた @rock619 さん
Crystal AtCoder に登録したら解くべき精選過去問 10 問を Crystal で解いてみた @tomerun さん
Common Lisp AtCoder に登録したら解くべき精選過去問 10 問を Common Lisp で解いてみた @fireflower0 さん
Ruby AtCoder に登録したら解くべき精選過去問 10 問を Ruby で解いてみた @d_nishiyama85 さん
Julia AtCoderに登録したら解くべき精選過去問 10 問を Julia で解いてみた @lcolaholicl さん
Piet AtCoderに登録したら解くべき精選過去問 10 問を難読言語 Piet で解いてみた basemusi さん
Swift AtCoderに登録したら解くべき精選過去問 10 問を Swift で解いてみた @cielavenir さん
Scala AtCoder に登録したら解くべき精選過去問 10 問を Scala で解いてみた @kgtkr さん
C AtCoderに登録したら解くべき精選過去問 10 問を C 言語で解いてみた @cielavenir さん
Bash AtCoder に登録したら解くべき精選過去問 10 問を Bash で解いてみた @cympfh さん
Lua AtCoder に登録したら解くべき精選過去問 10 問を Lua で解いてみた Nobuyuki さん
VB.Net AtCoderに登録したら解くべき精選過去問 10 問を VB.Net で解いてみた @cielavenir さん
F# AtCoder に登録したら解くべき精選過去問 10 問を F# で解いてみた @kuuso1 さん
Octave AtCoder に登録したら解くべき精選過去問 10 問を Octave で解いてみた ヘクトさん
Whitespace AtCoder に登録したら解くべき精選過去問 10 問を Whitespace で解いてみた @rsk0315_h4x さん
CoffeeScript AtCoder に登録したら解くべき精選過去問 10 問を CoffeeScript で解いてみた @prd_xxx さん
Clojure AtCoder に登録したら解くべき精選過去問 10 問を Clojure で解いてみた @fireflower0 さん
Scheme AtCoder に登録したら解くべき精選過去問 10 問を Scheme(Gauche) で解いてみた @fireflower0 さん
PostgreSQL AtCoder に登録したら解くべき精選過去問 10 問を PostgreSQL で解いてみた nkhrlab さん
Perl AtCoder に登録したら解くべき精選過去問 10 問を Perl で解いてみた @cielavenir さん
Pascal AtCoder に登録したら解くべき精選過去問 10 問を Pascal で解いてみた @cielavenir さん
OCaml AtCoder に登録したら解くべき精選過去問 10 問を OCaml で解いてみた kuwa さん
COBOL AtCoder に登録したら解くべき精選過去問 10 問をCOBOLで解いてみた @moment さん
Hexagony AtCoder に登録したら解くべき精選過去問 10 問を Hexagony で解いてみた @rsk0315_h4x さん
AWK AtCoder に登録したら解くべき精選過去問 10 問を AWK で解いてみた @kotatsugame さん
MoonScript AtCoder に登録したら解くべき精選過去問 10 問を MoonScript で解いてみた @cielavenir さん
Brainf*ck AtCoder に登録したら解くべき精選過去問 10 問を Brainf*ck で解いてみた @koi_kotya さん

言語別の競技プログラミング入門資料たち

それでは各言語別の入門資料たちをまとめて行きます。

Python

最近は Python で競プロを始める人が激増しています!
データ分析や機械学習において Python がメジャーな言語となったことから、Python を学びたいという方は大勢いるでしょう。Python を勉強したいというモチベーションで AtCoder を始める方も多いと聞きます。計算実行速度の観点からは C++ に比べてやや不利の感はありますが、AtCoder では時間制限が厳しい問題は少ないので Python でもほとんどの問題は通せます。今後 Python で書かれたアルゴリズム解説資料などが充実して行くといいなと思います。

Ruby

AtCoder 上の多くの問題で Shortest をとっているコードは Ruby で書かれているイメージがあります。

Java

蟻本著者の 1 人である wata さんは Java 使いでした!
計算実行速度は C++ よりやや遅い程度で、不利というレベルではありません。競プロ的には BigInteger が使えるメリットもあり、普段は C++ を使う人でも多倍長整数を扱いたいときには Java を使うという人も多いでしょう。なお、AtCoder / AOJ では C++ Boost ライブラリが使えるようになったため、C++ でも多倍長整数を扱えるようです。

C#

みなさんご存じの AtCoder 社長 Chokudai さんは C# 使いです。チーター本は C# による競技プログラミング入門資料としても知られています。

C

C++ まで進むのが大変な方のために。

Fortran

その昔、C の登場前には数値計算用言語として主流でした。現在も Fortran で書かれた数値計算コードは数多く存在します。

D

競プロ界で D 言語が大流行したときもありましたね!解説記事も充実しています。

Rust

コアなファンの多い Rust です!
@tubo28 さんの記事のおかげで、多言語で競プロを始めるための資料たちが充実して来ました!
Rust は標準入出力部分だけでも様々な工夫の余地があるみたいですね。計算実行速度も速いイメージがあるので競プロ適性も高そうです。

Go

Go は実行速度が速いので実践的なアルゴリズムたちが実装できそうですね!

Nim

Nim も Python のようなシンプルな構文でありながら、実行速度が速いですね!

Crystal

Nim が C 並高速計算実行のできる Python なら、Crystal は C 並高速計算実行のできる Ruby という感じでしょうか。

Haskell

Haskell は標準入出力が難しいイメージがありますが、入出力から丁寧に解説した記事たちがあります!

Scala

Scala は Haskell に比べるとやりやすそうです。

F#

関数型言語ですが .NET Framework 向けということもあって面白い言語ですね。

Common Lisp

ついに Lisp も出ました。

Scheme

Lisp 系言語の中で速い方のようです。

OCaml

関数型言語としてはかなり高速に動作するので競プロ向きかもですね。

Standard ML

OCaml と祖を同じくする、強い静的型付きの純粋ではない関数型言語ですね。

Clojure

関数型の書きやすい言語の 1 つですね。

Kotlin

Kotlin は Android アプリ開発言語として知られていますが、競プロにおいても ICPC 世界大会で使えるようになったことで注目度が上がっている言語です。JVM 言語の一つで Java と同等の実行速度を持ちつつ、簡潔なコードを書くための文法機能が充実していることが魅力です。 (YMATSUX さんより)

Swift

現状 AtCoder の Swift バージョンは古いですが、きれいに対応してくれた記事が登場しました!

JavaScript

JavaScript でも入出力ができます。

CoffeeScript

JavaScript を書きやすくするために生まれた言語ですね。

Perl

Perl6

第 8 問: Otosidama の解説が面白いです。

PHP

PHP は Web 開発でよく使われているイメージですが、PHP で競プロやるのも面白そうです。

VB.Net

Pascal

Octave

Matlab とほぼ互換性のある言語ですね。

Julia

Julia は数値計算に強いイメージがありますが、色んな要素を併せ持った言語ですね。

Lua

Lua も色んな要素を併せ持った言語ですね。

PostgreSQL

COBOL

COBOL でやるのは難しそうなイメージがありましたが、ついに登場しました!

Piet

難読言語です!

Whitespace

難読言語です!

Hexagony

難読言語です!

Brainf*ck

有名な難読言語です!

Bash

すごく面白いです!

AWK

AWK も色んなことができます!

MoonScript