Edited at

言語の習得やアルゴリズムの学習に最適 オンラインジャッジサイト一覧(2019/04 版)


概要

オンラインジャッジと呼ばれるサイトがあります。あるプログラムのお題が出されて、それに対応するプログラムを書いて提出し評価されるというサイトです。古くはProject Eulerみたいに問題だけ出されてサーバー側でプログラムを評価しないものもありましたが、AIZU ONLINE JUDGE (AOJ)に代表されるように問題が豊富なサイトも増えて来ました。

しかし日本の著書(プログラミングコンテストチャレンジブック [第2版] ~問題解決のアルゴリズム活用力とコーディングテクニックを鍛える~ オンラインジャッジではじめるC/C++プログラミング入門プログラミングコンテスト攻略のためのアルゴリズムとデータ構造)ではAOJしか紹介されていないことも多いので、主に英語のサイトを中心にオンラインジャッジサイトをまとめてみました。

ちなみに、転職のためにコーディング力を評価してもらうpaiza CodeIQみたいなサイトもありますが、ここではもっと気軽に試せるもの、新しい言語の習得の入り口として使えそうなサイト中心に選んでます。

(更新:2016/08/10 最近のpaizaはただ問題を試すだけというスタンスもOKな気がしますので本名の登録が必須なCodeIQに変更しました)


サイト一覧


atCoder

http://atcoder.jp/

認証可能アカウント
プログラム言語

自前アカウント
C, C++14, C#, Closure, Common Lisp, D, Fortran, Go, Haskell, Java7, Java8, JavaScript, OCaml, Pascal,
PHP(5.6, 7), Python(2, 3)1, Perl(5.18, 6), Ruby, Scala, Scheme, Text(cat), Visual Basic(Mono), Brainfuck, Standard ML, Crystal, F#,Unlambda, Lua2、MoonScript,
Ceylon, Julia, Octave, Nim, TypeScript, Kotlin

問題解説が丁寧なのが特徴のサイト。毎週末に90~120分の競技プログラム形式のコンテストもやっており、コンテスト後にはニコ生で丁寧な解説プレゼンもやってくれます。

問題難易度はやや難し目な印象。問題によってはC#以上の高速な言語(C,C++,Java)あたりでないと時間切れになって解けないかもしれません。LL系言語だと制限時間的に厳しいものもあるようです。


yukicoder

https://yukicoder.me/

認証可能アカウント
プログラム言語

Twitter,GitHub (どちらかのアカウントが必須)
C, C90, C++17, C#, Closure, Lua, D, Fortran, Go,
Haskell, Java8, JavaScript, OCaml, PHP(5.6, 7), Python(2, 3), Perl(5.16, 6), Ruby, Scala, Text(cat), Brainfuck, WhiteSpace, Crystal, F#, Assembler(nasm),
CLay, Nim, TypeScript, Kotlin, Rust

atCoderと共に数少ない日本語対応のサイト。自分で作問できるページがあるのと、テストケースが全部オープンでかつテストケースを間違った場合、どのように間違ったかが見られるのが大きな特徴。今どきTwitterアカウントなら誰でも持っていると思いますので、日本人の初心者には一番ハードルが低い印象を受けます。


Checkio

http://checkio.org

認証可能アカウント
プログラム言語

Facebook, Google, GitHub, LinkedIn, Twitter
Python2, 3

私はこのサイトからオンラインジャッジを本格的にやるようになりました。以前Pythonの簡単な問題を解かないとアカウントを作れないことで有名でしたが、最近はやってないようです。

昔は英語だけでしたが、問題によっては日本語化されているものもあります。

問題を解いた後は他の人の解答を読んだり、いいね!することができます。こんな書き方があるのかといった勉強にもなります。また問題を解いたりいいね!されるとレベルが上がったり、バッジが取得出来るのでゲーミフィケーション的な要素もあります。


Codewars

http://www.codewars.com/

認証可能アカウント
プログラム言語

GitHub
CoffeeScript, Javascript, Python, Ruby, Java, Clojure, Haskell, C#

プログラム言語のチョイスが独特です。最初にごく簡単な問題を解かないとアカウント登録することができません3。問題を通じてプログラム言語を身に着けることを空手になぞらえており、各問題はKata、問題のレベルはKyuと呼んでいます。問題によって解ける言語が限定されています。他の人の解答も見ることが可能であり、CheckIOに似ている気がします。


CodinGame

https://www.codingame.com

認証可能アカウント
プログラム言語

Facebook, Google, LinkedIn, GitHub
C#, C++, Java, Python(2, 3), Bash, C, Clojure, Dart, F#, Go, Groovy, Haskell, Lua, ObjectiveC, OCaml, Pascal, PHP, Ruby, Rust, Scala, Swift, VB.NET

フランスの会社がメインでやっているサイト。

大きな特徴としては、(問題によりますが)出力結果がテキストだけではなく、キャラクターが実際に動いて成功や失敗の過程をグラフィックで見せてくれる所。その分サイトも重いです。

他にはプログラマ同士があるルールのゲームに対してAIプログラムを出しあって、オンラインで対戦するモードもあるようです。私は参加したことありませんが。

期間限定のコンテストも開かれていてスポンサーから商品もそれなりに出ているようです。

実績機能もあり、同じ問題を15の別の言語で解いたら獲得できるバッジとかもあります。ただ、解いた問題の答えは1つしかサイト側では覚えてくれないので、自分でファイルに取っておく必要があります。


HackerRank

https://www.hackerrank.com/

認証可能アカウント
プログラム言語

Facebook, Google, GitHub
C++, Java, Python, Ruby, SQL

このサイトは問題が言語やアルゴリズム別に分類されているので、学習にはうってつけだと思います。ログインしたり問題を解いたりして得られるHackosというサイト内通貨がありますが、これはどうしても通らないテストケースを見るのに使ったりするようです。


ROSALIND

http://rosalind.info

認証可能アカウント
プログラム言語

Facebook, Google, GitHub, Twitter他
主にPython

生命情報学の学生に対してPythonのテキスト処理を学ばせることを目的としたサイト。

問題の提出方法はちょっと変わっていて、問題にそったデータセットをダウンロードしてそのデータセットに対応した出力を提出することでプログラムの正しさを検証します。なので厳密にはどのプログラミング言語を使ってもOKだと思われます。


Sphere Online Judge (SPOJ)

http://www.spoj.com/

認証可能アカウント
プログラム言語

アカウント登録が必要
ADA95, Assembler, Awk, Bash, Brainf**k, C, C99, C#, C++(14), Clips, Clojure, COBOL, Common Lisp, D, Elixir, Erlang, F#, Fantom, Fortan 95, Go, Gosu, Groovy, Haskell, Icon, Java, Javascript, Lua, Nemerle, Nice, Nim, ObjectiveC, OCaml, Pascal, Perl, PHP, PicoLisp, Pike, Prolog, Python(2,3), Ruby, Rust, Scala, Scheme, Sed, Smalltalk, Tcl, TECS, Text, Whitespace

とにかく利用可能言語が多いのが特徴。あまり深くは使ってません。


AIZU ONLINE JUDGE (AOJ)

http://judge.u-aizu.ac.jp/onlinejudge/

認証可能アカウント
プログラム言語

アカウント登録が必要
C, C++(11), Java, C, C#, D, Ruby, Python(2, 3), PHP, Javascript, Scala, Haskell, OCaml

他に解説サイトや本が多数あると思うので詳しい説明は省きます。


PKU Online Judge (北京大学)

http://poj.org/

認証可能アカウント
プログラム言語

アカウント登録が必要
C、C++、JAVA、Pascal、Fortran

世界的にはこれが有名じゃないでしょうか。


LeetCode OJ

https://leetcode.com

認証可能アカウント
プログラム言語

Facebook, Google, LinkedIn, GitHub
C, C++, C#, Java, Javascript, Python, Ruby, Go, Swift, MySQL, Bash

アルゴリズム、データベース、シェルで問題が分けられているのが特徴。


anarchy Golf

http://golf.shinh.org/

認証可能アカウント
プログラム言語

アカウント登録の必要なし
多数のため省略

いかに短くプログラムを書けるかというCodeGolfに特化したサイトでランキングも表示されています。Z80のアセンブラとかにも対応しているようです。A++ なんて言語あるなんて初めて知りました。


Code-Golf

https://code-golf.io/

認証可能アカウント
プログラム言語

GitHub
Bash, Brainf**k, C, Haskell, J, Javascript, Julia, Lisp, Lua, Perl, Perl6, PHP, Python, Ruby

こちらもCodeGolfに特化したサイトですが、複数言語の文字数がそれぞれサイトに保存され、コーディング画面が一覧出来るのが特徴。他の人のソースは見ることができないのですが、GitHub上にリポジトリがあり まだまだ発展途上のようです。J言語 をサポートしているのは珍しい。


Coderbyte

https://coderbyte.com/

認証可能アカウント
プログラム言語

アカウント登録が必要
C, C++, Java, Javascript, Python, PHP, Ruby, Go, Swift

問題を解くのは無料ですが、各種のプログラミング言語を学ぶコースを受講しようとすると月24ドル取りますよというサイトのようです。受講コースにはSQL, React, jQuery, Node.js などがあるようです。

変わった所としてはスマホでアクセスすると、簡単な言語クイズができます。


CodeChef

https://www.codechef.com/

認証可能アカウント
プログラム言語

Facebook, Google, GitHub
ADA95, Assembler(nasm 2.11), bash, brainf**k, C(99), C++(14), C#, D, Erlang, Fortran, F#, Go, Haskell, intercal, Icon, Java, Javascript, Pascal, Perl, Perl6, PHP, Pike, Prolog, Python(3), Ruby(1.9), Scala, Scheme, Smalltalk, Tcl, Text, Whitespace

問題を解かないで正解が見られることが特徴。アセンブラとPerl6が使えるのは珍しい気がします。関数プログラミング実践入門 の付録で知ったので追加しました。


ACM-ICPC Live Archive

https://icpcarchive.ecs.baylor.edu/

認証可能アカウント
プログラム言語

アカウント登録の必要あり
C, C++(11), Java, Python3

世界的に権威ある計算機学会の国際大会のアーカイブです。精査はしてないのですが問題は全体的に難し目と思われます。


URI Online Judge

https://www.urionlinejudge.com.br

認証可能アカウント
プログラム言語

Facebook, Google+, GitHub, Dropbox, LinkedIn, BitBucket
C, C++11, Java, Python(2, 3), Ruby

サイトURLからも分かる通りブラジルの人が中心になってやっているサイトです。質問掲示板なんかはブラジルポルトガル語が公用語になっているような気がします。時々コンテストもやっています。


Timus Online Judge

http://acm.timus.ru/

認証可能アカウント
プログラム言語

アカウント登録が必要
Pascal, C, C++(11, 14), Java, C#, VB.NET, Python(2, 3), Go(1.3), Ruby(1.9), Haskell, Scala

問題の難しさが独自の計算式で表されているのが特徴。色々なところのコンテスト問題を転載して使っているようです。


paiza系


本体

https://paiza.jp

認証可能アカウント
プログラム言語

Twitter, Facebook, GitHub
C, C++, C#, Java, JavaScript, PHP, Python(2, 3), Ruby, Perl, Objective-C, Scala, Go, Swift

paiza本体は仕事寄りだな…と思っていじってなかったのですが、最近問題だけというスタイルと取り入れたようです。初回提出時の時間とスコアでランキングが出るのが特徴4。Bランク以上の問題を3問以上解くと、特定の言語マスターになれるようです。

常にどこそこの会社からオファーがあります的なメニューがあるのが特徴ですが、無視することも可能です。


プログラミングで彼女を作る

https://paiza.jp/poh/ando

認証可能アカウント
プログラム言語

アカウント登録が必要
C, C++, Java, Java, PHP, Python(2, 3), Perl, Ruby, Objective-C, Scala, Go, Swift, Haskell5, CoffeeScript5, Bash5, Erlang5, R5, COBOL5, VB5, F#5, Clojure5, D5

問題レベルは中級くらい。お試しコンテンツ的な感じだったのでしょうが、もっと問題のバリエーションあってもよかったと思います。


コードガールズコレクション

https://paiza.jp/cgc

認証可能アカウント
プログラム言語

Facebook, GitHub, Twitter, paiza
PHP, Ruby, Python, Java

ブラウザゲーム風だけどプログラミングの学習で言うと……問題が異様に簡単な上にコンボボーナスとかがあるのであまり学習向きでないように感じます。もちろん後半になれば違うと思いますが。


恋するハッカソン~君色に染まるアイドル~

https://paiza.jp/poh/hatsukoi/

認証可能アカウント
プログラム言語

Facebook, GitHub, Twitter, paiza
Swift, C, C++, C#, Objective-C, Java, Perl, Python(2.x), Python(3.x), Ruby, PHP, Scala, Go, Haskell, Erlang,Bash, R, JavaScript, CoffeeScript, Cobol, VB, F#, Clojure, D

これを書いている時に発表されたばっかりなので本当に最初しかやってないのですが、問題をじっくり解くような作りになってるので、コードガールズコレクションよりはいいんじゃないかと思います。「プログラミングで彼女を作る」に近い。

ちなみにトップページにあるスマホへのリンクはテーマソング配信へのリンクのようです。


もし次の常駐先が女子エンジニアばっかりだったら

https://paiza.jp/moshijo

認証可能アカウント
プログラム言語

Facebook, GitHub, Twitter, paiza
Swift, C, C++, C#, Objective-C, Java, Perl, Python(2.x), Python(3.x), Ruby, PHP, Scala, Go, Haskell, Erlang,Bash, R, JavaScript, CoffeeScript, Cobol, VB, F#, Clojure, D

問題はやさしめだが、1問だけランキング問題アリ。一人雇うのに1問。それ以外のゲーム部分は育てゲーのパラメータ上げみたいな感じ。進捗と品質が独立なパラメータになっていてとにかく進捗を100%にしたら納品してプロジェクト終了だが、最低限の品質目安は達成しないとプロジェクトが炎上して疲労がたまるというゲームデザイン。問題部分の解き方によって(例えばコードゴルフとか)キャラクターの能力が変わっていたら、面白いゲームになっていた可能性はある。個人的には次回作に期待。

(12/11 追記) 9人エンジニアを集めるととりあえずのクリアですが、全体的に問題は簡単目です。彼女を作る~よりも簡単。最初の入り口としてはいいんじゃないでしょうか。


その他

paiza.io, ideone.com, codepad.org, jsdo.it といったサイトではコードをアップロードしてURLリンクを取得することができるので、これを使って掲示板やチャットで質問するというのも有効な学習方法です。


最後に

数多く紹介することを目的としたので、解説の量に温度差があるのはお許しください。

他にもこんなサイト知ってるよ、という方がいましたらコメント頂ければ随時追加していきます。





  1. Python2, Python3, PyPy環境あり 



  2. LuaJIT環境 



  3. GitHubのアカウント作っておけば迂回することは可能 



  4. いつでも挑戦できるので不正のしようはあるのでしょうが… 



  5. beta版