概要
オンラインジャッジと呼ばれるサイトがあります。あるプログラムのお題が出されて、それに対応するプログラムを書いて提出し評価されるというサイトです。古くはProject Eulerみたいに問題だけ出されてサーバー側でプログラムを評価しないものもありましたが、AIZU ONLINE JUDGE (AOJ)に代表されるように問題が豊富なサイトも増えて来ました。
しかし日本の著書(プログラミングコンテストチャレンジブック [第2版] ~問題解決のアルゴリズム活用力とコーディングテクニックを鍛える~ 、オンラインジャッジではじめるC/C++プログラミング入門、プログラミングコンテスト攻略のためのアルゴリズムとデータ構造)ではAOJしか紹介されていないことも多いので、主に英語のサイトを中心にオンラインジャッジサイトをまとめてみました。
サイト一覧
AtCoder
認証可能アカウント | プログラム言語 |
---|---|
自前アカウント | 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分の競技プログラム形式のコンテストもやっており、コンテスト後にはYouTube で解説も行ってくれます(AtCoder チャンネルへのリンク)。
問題難易度はやや難し目な印象。問題によってはC#以上の高速な言語(C,C++,Java)あたりでないと時間切れになって解けないかもしれません。LL系言語だと制限時間的に厳しいものもあるようです。が、最近だとPythonでもトップレベルになる人が現れ始めたので、言語ではなくアルゴリズムを素早く実装する力が問われる傾向が強まって来たと思います。
yukicoder
認証可能アカウント | プログラム言語 |
---|---|
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アカウントなら誰でも持っていると思いますので、日本人の初心者には一番ハードルが低い印象を受けます。
アルゴ式
認証可能アカウント | プログラム言語 |
---|---|
C, C++, text, Python3, Ruby3, Java11, C#, go, Swift, TypeScript, Scala3, Rust, Kotlin, Haskell, Pypy3, PHP, Perl, Awk, Bash, bc, dc, sed, dart |
2021/8 月頃に出来たサイトでまだベータ版のようですが、いわゆる教科書的なアルゴリズムだけではなく、基本的な内容からステップアップして学べることが特徴。他のサイトは応用問題を解く成績によってレーティングを競うものがメインですが、難しくないものからコツコツ続けられることを主眼に置いている印象をうけます。
Checkio
認証可能アカウント | プログラム言語 |
---|---|
Facebook, Google, GitHub, LinkedIn, Twitter | Python2, 3 |
私はこのサイトからオンラインジャッジを本格的にやるようになりました。以前Pythonの簡単な問題を解かないとアカウントを作れないことで有名でしたが、最近はやってないようです。
昔は英語だけでしたが、問題によっては日本語化されているものもあります。
問題を解いた後は他の人の解答を読んだり、いいね!することができます。こんな書き方があるのかといった勉強にもなります。また問題を解いたりいいね!されるとレベルが上がったり、バッジが取得出来るのでゲーミフィケーション的な要素もあります。
Codeforces
認証可能アカウント | プログラム言語 |
---|---|
OpenID, Google, Facebook | GCC C11, C++17, Clang++17, Visual Studio C++ 2010, Visual Studio C++ 2017, C# Mono 5.18, D, Go, Haskell, Java 11, Java 1.8, Kotlin 1.3, Ocaml 4.02, Delphi 7, Pascal 3.0.2, Pascal .NET 3.4.2, Perl 5.20, PHP 7, Python 2.7, Python 3.7, PyPy 2.7, PyPy 3.6, Ruby 2, Scala 2.12, JavaScript V8 4.8, Node.js 9.4 |
異様にC++コンパイラの実装バリエーションがあるのが特徴です。回答のソースコードを投稿する際はテキストエリアに貼り付ける形ではなく、ファイルをアップロードする方式なので一回プログラムをファイルに保存する必要があります。ロシアの人が作ったサイトらしく、英語とロシア語が用意されており、ユーザーベージに対して自分のブログを作ることが出来るのが特徴 3。また過去のコンテストに対してバーチャルに参加できるVirtual contest という機能があるみたいです(未確認)
Codewars
認証可能アカウント | プログラム言語 |
---|---|
GitHub | CoffeeScript, Javascript, Python, Ruby, Java, Clojure, Haskell, C# |
プログラム言語のチョイスが独特です。最初にごく簡単な問題を解かないとアカウント登録することができません4。問題を通じてプログラム言語を身に着けることを空手になぞらえており、各問題はKata、問題のレベルはKyuと呼んでいます。問題によって解ける言語が限定されています。他の人の解答も見ることが可能であり、CheckIOに似ている気がします。
CodinGame
認証可能アカウント | プログラム言語 |
---|---|
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
認証可能アカウント | プログラム言語 |
---|---|
Facebook, Google, GitHub | C++, Java, Python, Ruby, SQL |
このサイトは問題が言語やアルゴリズム別に分類されているので、学習にはうってつけだと思います。ログインしたり問題を解いたりして得られるHackosというサイト内通貨がありますが、これはどうしても通らないテストケースを見るのに使ったりするようです。
ROSALIND
認証可能アカウント | プログラム言語 |
---|---|
Facebook, Google, GitHub, Twitter他 | 主にPython |
生命情報学の学生に対してPythonのテキスト処理を学ばせることを目的としたサイト。
問題の提出方法はちょっと変わっていて、問題にそったデータセットをダウンロードしてそのデータセットに対応した出力を提出することでプログラムの正しさを検証します。なので厳密にはどのプログラミング言語を使ってもOKだと思われます。
Sphere Online Judge (SPOJ)
認証可能アカウント | プログラム言語 |
---|---|
アカウント登録が必要 | 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)
認証可能アカウント | プログラム言語 |
---|---|
アカウント登録が必要 | C, C++(11), Java, C, C#, D, Ruby, Python(2, 3), PHP, Javascript, Scala, Haskell, OCaml |
他に解説サイトや本が多数あると思うので詳しい説明は省きます。
PKU Online Judge (北京大学)
認証可能アカウント | プログラム言語 |
---|---|
アカウント登録が必要 | C、C++、JAVA、Pascal、Fortran |
世界的にはこれが有名じゃないでしょうか。
LeetCode OJ
認証可能アカウント | プログラム言語 |
---|---|
Facebook, Google, LinkedIn, GitHub | C, C++, C#, Go, Java, Javascript, Kotlin, PHP, Python, Ruby, Rust, Scala, Swift |
アルゴリズム、データベース、シェルで問題が分けられているのが特徴。
anarchy Golf
認証可能アカウント | プログラム言語 |
---|---|
アカウント登録の必要なし | 多数のため省略 |
いかに短くプログラムを書けるかというCodeGolfに特化したサイトでランキングも表示されています。Z80のアセンブラとかにも対応しているようです。A++ なんて言語あるなんて初めて知りました。
Code-Golf
認証可能アカウント | プログラム言語 |
---|---|
GitHub | Bash, Brainf**k, C, Haskell, J, Javascript, Julia, Lisp, Lua, Perl, Perl6, PHP, Python, Ruby |
こちらもCodeGolfに特化したサイトですが、複数言語の文字数がそれぞれサイトに保存され、コーディング画面が一覧出来るのが特徴。他の人のソースは見ることができないのですが、GitHub上にリポジトリがあり まだまだ発展途上のようです。J言語 をサポートしているのは珍しい。
Coderbyte
認証可能アカウント | プログラム言語 |
---|---|
アカウント登録が必要 | C, C++, Java, Javascript, Python, PHP, Ruby, Go, Swift |
問題を解くのは無料ですが、各種のプログラミング言語を学ぶコースを受講しようとすると月24ドル取りますよというサイトのようです。受講コースにはSQL, React, jQuery, Node.js などがあるようです。
変わった所としてはスマホでアクセスすると、簡単な言語クイズができます。
CodeChef
認証可能アカウント | プログラム言語 |
---|---|
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
認証可能アカウント | プログラム言語 |
---|---|
アカウント登録の必要あり | C, C++(11), Java, Python3 |
世界的に権威ある計算機学会の国際大会のアーカイブです。精査はしてないのですが問題は全体的に難し目と思われます。
URI Online Judge
認証可能アカウント | プログラム言語 |
---|---|
Facebook, Google+, GitHub, Dropbox, LinkedIn, BitBucket | C, C++11, Java, Python(2, 3), Ruby |
サイトURLからも分かる通りブラジルの人が中心になってやっているサイトです。質問掲示板なんかはブラジルポルトガル語が公用語になっているような気がします。時々コンテストもやっています。
Timus Online Judge
認証可能アカウント | プログラム言語 |
---|---|
アカウント登録が必要 | Pascal, C, C++(11, 14), Java, C#, VB.NET, Python(2, 3), Go(1.3), Ruby(1.9), Haskell, Scala |
問題の難しさが独自の計算式で表されているのが特徴。色々なところのコンテスト問題を転載して使っているようです。
paiza系
本体
認証可能アカウント | プログラム言語 |
---|---|
Twitter, Facebook, GitHub | C, C++, C#, Java, JavaScript, PHP, Python(2, 3), Ruby, Perl, Objective-C, Scala, Go, Swift |
paiza本体は仕事寄りだな…と思っていじってなかったのですが、最近問題だけというスタイルと取り入れたようです。初回提出時の時間とスコアでランキングが出るのが特徴5。Bランク以上の問題を3問以上解くと、特定の言語マスターになれるようです。
常にどこそこの会社からオファーがあります的なメニューがあるのが特徴ですが、無視することも可能です。
プログラミングで彼女を作る
認証可能アカウント | プログラム言語 |
---|---|
アカウント登録が必要 | C, C++, Java, Java, PHP, Python(2, 3), Perl, Ruby, Objective-C, Scala, Go, Swift, Haskell6, CoffeeScript6, Bash6, Erlang6, R6, COBOL6, VB6, F#6, Clojure6, D6 |
問題レベルは中級くらい。お試しコンテンツ的な感じだったのでしょうが、もっと問題のバリエーションあってもよかったと思います。
コードガールズコレクション
認証可能アカウント | プログラム言語 |
---|---|
Facebook, GitHub, Twitter, paiza | PHP, Ruby, Python, Java |
ブラウザゲーム風だけどプログラミングの学習で言うと……問題が異様に簡単な上にコンボボーナスとかがあるのであまり学習向きでないように感じます。もちろん後半になれば違うと思いますが。
恋するハッカソン~君色に染まるアイドル~
認証可能アカウント | プログラム言語 |
---|---|
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 |
これを書いている時に発表されたばっかりなので本当に最初しかやってないのですが、問題をじっくり解くような作りになってるので、コードガールズコレクションよりはいいんじゃないかと思います。「プログラミングで彼女を作る」に近い。
ちなみにトップページにあるスマホへのリンクはテーマソング配信へのリンクのようです。
もし次の常駐先が女子エンジニアばっかりだったら
認証可能アカウント | プログラム言語 |
---|---|
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といったサイトではコードをアップロードしてURLリンクを取得することができるので、これを使って掲示板やチャットで質問するというのも有効な学習方法です。
最後に
数多く紹介することを目的としたので、解説の量に温度差があるのはお許しください。
他にもこんなサイト知ってるよ、という方がいましたらコメント頂ければ随時追加していきます。