日本語でプログラムコンテストの問題が解けるサイト

/

導入

プログラミングのジャンル(?)で、プログラミングコンテストや競技プログラミングと呼ばれるものがあります。ソフトウェアを作るのではなくプログラムの問題を解いて、その速さやプログラムの出来を競うというものです。参加者の中には単純に競技として楽しんでいる人もいますが、自分のレベルにあった問題を解くことでプログラミングスキルを上げるためのトレーニングにもなります。

海外のサイトでは賞金が出される場合などもあり世界中に挑戦者がいるようですが、日本語で問題が解けるサイトもいくつかあるので調べてみました。

AOJ

AOJ(Aizu online judge)は会津大学によって運営されている,競技プログラミングライクな問題の解けるサイトです。
対応している言語はc,c++,C#,JAVA,Python,Python3,Ruby,PHP,JavaScriptなどがあり問題は日本語と英語に対応しています。

使い方

使い方はトップページ右上からまず日本語選び、その下にある初めての方へを選びます。あとはページの内容に従って会員登録を済ませ好きな問題を解いていくだけです。

問題の解く手順はまずメニューバーの問題セットの中から好きな問題のカテゴリを選びます。一番最初は初心者向けのIntroduction to Programingから選ぶのがいいかもしれません。
カテゴリを選ぶと問題の一覧が表示されるので解きたい問題のタイトルを選択しま。すると問題の内容が表示されるので、内容を良く読んで答えの条件を満たす結果を出すプログラミングを書きます。

答えの提出

プログラムが組めたら問題のページの右上にあるアイコン中からsubmitアイコン(書類に矢印)を選択します。
するとjudeのページが開かれるので、問題を解くのに使用する言語を選びsourceと書かれたフレーム内に提出する自身のソースコードを記入します。
コードを記入し提出を押すとTOPページに飛ばされ、そこで提出したコードが評価されます。
コードが答えの条件を満たせていたら緑のチェックマークと共にAcceptedと返されます、答えが間違っていたい場合にはWrong answerが返ってくるので、ソースコードを修正して再チャレンジしてみましょう。

また提出したソースコードになんらかの問題があった場合には各種のエラーが返されてきますので、Judges’s Recipesを参考にソースコードの修正をしてみてください。

コードを参照する

問題のページのアイコンの中から虫眼鏡のアイコンを選ぶと他の人が書いたコードを参照する事ができます。頑張ってみたけれどどうしても解けない問題の答えを確認してみたり、自分で解いた問題のコードを他人の書いたものと比べるのも勉強になると思います。

AOJはプログラミングで問題を解くという目的のためのシンプルなサイトです。
シンプルなだけに使いやすく、また肝心の問題の質や量も海外の有名なサイトにもひけをとっていないと思います。(上級の問題は僕には難しいので解りませんが)
また同じ問題で自分と他人の解いたコードを比べられるというのも大きなメリットで、自力で解けた問題でも他人のコードを見ると色々と発見があるので純粋なプログラミングのスキルアップという点では一番活用しやすいサイトだと思います。

Paiza

Paizaは、プログラミングコンテストとリクルートを合体させたサービスです。プログラミングの問題を解く事でランクを上げて行き、ランク毎に対応した企業の採用面接に応募が出来るというシステムになっています。
採用試験を兼ねているため問題クリアの条件はある程度シビアで、制限時間が設けられていて各問題は一度しか受けられません。ただし応募のためのランクアップに使えないというだけで問題自体は何度も解くことが出来ます。
応募の際には実際に自分が書いたコードも企業に提出されるようです。

また採用選考に利用されるという特性上問題や問題の回答をweb上にアップしたり、問題に関して掲示板などで質問することは禁止されています。そのため解けなかった問題の答え合わせや他人と自分の答えを比較するという事も出来ません。

問題の答えが調べられないので勉強に使うには少し不便ですが、制限時間が設定してあってより競技プログラミングに近い環境で問題に挑戦出来ます。AOJで練習してPaizaで腕試しという風に使いわけてもいいかもしれません。
また転職活動をしている人にとっては、もちろんリクルートのためのサイトとしても使えます。

PaizaIO

PaizaIO
Paizaはプログラミングコンテスト用のサイトの他にweb上で使えるテキストエディタのサービスも提供していて無料で使えます。
使い方は簡単で「コード作成を試してみる」を押すと、エディタの画面に飛ぶのでそこでコードを書いて実行を押すだけで処理が返ってきます。標準入力にも対応しているので、PHPやJavaScriptなど手元で試すにはちょっとめんどうな言語で問題を解く際に重宝します。
会員登録をしてログインするとコードのダウンロードや共有も出来るようですが、そのまま使っても十分便利です。

Codecombat

codecombat
最後はすこし変り種でゲームをしながらプログラミングの学べるサイトです。一部翻訳されていませんが、日本語にも対応しています。
Paizaがプログラミング+リクルートならCodeCombatはプログラミング+RPGといった感じになっています。
言語はPython,JavaScript,CoffeScript,Luaに対応しています。

基本的な流れは各ステージごとに設定されたミッションをプログラムを書いてクリアし、ゲーム内通貨やアイテムを入手する事でプレイヤーを強くしていきます。最終的に成長させたプレイヤーでステージをクリアするのが目的です。
基本的に無料でプレイ出来ますが課金要素もあります。
課金をすると追加のゲーム内通貨が入手出来たり、月々9.99$の課金で追加キャラクターがアンロックされるなどの特典があるようです。
親が課金に対して厳しい家庭でもプログラミングの勉強になるんだよと言えば財布の紐も緩むかもしれないので、プログラミングに興味があるキッズは狙ってみてもいいかもしれません。

まとめ

プログラミングの技術は知識として覚えるだけでなく自分でコードが書けなければ身についたとは言えません。そのためプログラミングの勉強では実際にコードを書いていく必要がありますが、初心者の間はソフトウェアを作るのも中々難しいと思います。その点プログラミングコンテストは手軽に実践的にトレーニングが積めるので、基礎を覚えた初心者の次のステップとして最適です。またよりハイレベルになると海外のサイトや大会などで賞金を手に入れられたりもするので、それを目標に頑張ってみるのも良いと思います。