第2回 AOJに登録して、問題を検索してみよう|Tech Book Zone Manatee

マナティ

新しくなったAOJでプログラミングチャレンジ!

第2回 AOJに登録して、問題を検索してみよう

AOJ(Aizu Online Judge:onlinejudge.u-aizu.ac.jp/home)は誰でも無料で利用できるプログラミング問題のオンライン採点システムです。プログラミングスキルを磨きたい方、レベルアップに最適。この冬、リニューアルした「新AOJ」について紹介していきます。

前回はオンラインジャッジシステムの仕組みと、Aizu Online Judge (AOJ:https://onlinejudge.u-aizu.ac.jp/)について簡単にご紹介しました。今回はAOJへのユーザ登録と問題の検索について解説します。

※この連載では新しくなったAOJのユーザインタフェースをご紹介しますが、旧バージョンのAOJ(http://judge.u-aizu.ac.jp)も引き続きご利用頂けます。また、今後のシステムアップデートでインタフェースが変更される可能性がありますのでご了承ください。

ユーザ登録する

一般的なオンラインジャッジシステムでは、問題や公開されている解答ソースコードはゲストとして自由に閲覧することができますが、プログラムを提出するためには、ユーザ登録を行う必要があります。AOJへのユーザ登録は以下のようにヘッダーメニュー右側の「Guest」→「ユーザ登録」から行います。

新規ユーザ登録ページは以下のような構成になっています。

ユーザ登録を行う前に、「利用規約について」のページにて注意事項を確認しましょう。利用規約には主にプログラムの提出に関する注意事項やソースコードの扱いについて記載されています。登録に必要な主な情報は以下の通りです。

① アカウントID:サインインに用いるIDを設定します。サイト内で使われるユニークなユーザIDとなります。

② 名前:ユーザステータスやランキングの表示に用いられる氏名(ニックネーム)を設定します。日本語の全角文字は使用できませんので注意してください。

③ アバター:ユーザステータスやランキングの一部に表示されるアイコン画像を設定します。現在約100キロバイトのサイズ制限があります。この項目はオプションですので未設定でも問題ありません。

④ 所属:学校や所属機関の名称を設定します。こちらも全角文字は使えませんのでアルファベット文字で設定します。

⑤ 表示言語:サイト内で用いる言語(JapaneseまたはEnglish)を指定します。サイトのメニューや問題文(存在する場合)が設定された言語で表示されます。

⑥ プログラミング言語:普段使用するプログラミング言語を指定します。プログラムを提出する際にプログラミング言語を選択することができますが、ユーザ登録で指定した言語がデフォルトとして自動的に設定されます。

現在AOJでは、以下のプログラミング言語で解答を提出することができます:C, C++, C++11, C++14, JAVA, C#, Python, Python3, Scala, Go, Rust, JavaScript, Ruby, PHP, D, OCaml, Haskell, Kotlin

⑦ 提出コードの公開: public設定の場合、提出されたソースコードが他のユーザ(ゲストユーザを含みます)に公開されます。private設定の場合は、自分だけが自分のソースコードにアクセスすることができます。オンラインジャッジシステムでは、ソースコードを公開することで他のユーザの学習に貢献できるだけでなく、レビューされることで自分のコードの改善にも繋がりますので、public設定にすることをお勧めしています。

入力が終了したら送信します。正しい入力が行われ「ようこそAOJへ!」というメッセージが表示されれば登録完了となります。

サインインする

オンラインジャッジの機能をフルに活用するためには、サインインを行う必要があります。ヘッダーメニューの「Guest」→「サインイン」からダイアログを開き、登録したユーザIDとパスワードを入力し、サインイン(ログイン)します。サインイン後は、プログラムを提出できるだけでなく、以下の機能面で便利になります:

  • 検索画面等で、自分がすでに解いている問題のチェックマークや進捗・得点を確認することができます。
  • 自分が提出したソースコードを閲覧することができます。
  • 問題にブックマークを付けることができます。
  • その他、リコメンド投票やタグ付けなどの、サーバーのデータを更新するための機能が有効になります。

また、サインイン後は、ユーザメニューにて登録情報とパスワードの更新を行うことができます。

問題を検索してみよう

ユーザ登録とサインインが完了したら、問題リストを確認してみましょう。

ヘッダーメニューに表示されているように、問題は主にコースチャレンジに分類されています。それぞれに特化したユーザインタフェースから問題を選択することができます。

※この分類は、コースの問題を解いてからチャレンジに移るといった、解く順番を推奨するものではありません。コースで知識を完璧にしてからコンテストに挑戦しよう、という目標設定はお勧めしません。初心者の方でも、プログラミングコンテストや過去問のチャレンジ問題を通して十分楽しく学ぶことができます。

コース問題の検索

コースには、プログラミングやアルゴリズムとデータ構造の入門のための問題セットが収録されています。主に各種プログラミング言語の文法や典型的な知識を養うことを想定した問題セットとなっています。コースは以下のようにいくつかのコースに分類されており、それぞれカードで表されています。カードにはコースのタイトルと概要に加えて、サインイン時には進捗を確認することができます。

① プログラミング入門は、基本制御構造などの文法を確認するための基礎的な問題で構成されており、これから新たにプログラミング言語を覚えたい方にお勧めします。

② アルゴリズムとデータ構造入門は、プログラマとして必要なアルゴリズムとデータ構造の基礎的な問題から構成されています。何かしらのプログラミング言語の文法の基礎を一通り習得し、さらにプログラマとしての基礎技術を身に付けたい方にお勧めします。

その他のコースは、古典的なアルゴリズムやデータ構造の知識を養うための問題です。これらの問題の中には高度なテクニックを要する難問も含みますので、無理に埋める必要はありません。また、コースの内容は、コース、トピック、問題が追加されることでアップデートされていきます。

オンラインジャッジではじめるC/C++入門』では、①プログラミング入門コースのすべての問題を対象に、基本文法と問題の解法を解説しています。
プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』では、②アルゴリズムとデータ構造コース及びその他のコースから精選されたトピックについて、アルゴリズムと問題の解法を解説しています。

カードを選択することで以下のようなコースのページを展開します。

各コースはいくつかのトピックから構成され、ページ上部のカードから各トピックの達成度(%)を確認することができます。さらにトピックはいくつかの問題で構成され、カードを選択することで中の問題リストを展開します。

問題リストでは、トピック及び各問題の得点を確認することができます。問題のカード(リンク)をクリックすると問題ページが開きます。問題ページについては、プログラムの提出方法と併せて次回詳しく解説します。

チャレンジ問題の検索

次に、チャレンジの問題にアクセスしてみましょう。チャレンジ問題には、過去に開催されたプログラミングコンテストの問題が収録されています。様々なソース(プログラミングコンテスト等)から異なる年代・レベルの問題が集められているため、基本検索画面となるファインダーに加えて、ブックマーク機能や各種検索機能が用意されています。

まずは、ソースから問題にアクセスするファインダーを使ってみましょう。 ヘッダーメニューの「チャレンジ」→「チャレンジ」から以下のファインダーを開きます。

上部のボタングループでソースを選択することができます。AOJでは主に以下のプログラミングコンテストの問題を収録させて頂いています。

ICPC ACM国際大学対抗プログラミングコンテスト(ACM-ICPC)日本リージョンの過去問です。最も歴史のあるプログラミングコンテストの1つです。20年分の問題を収録させて頂いています。https://icpc.iisf.or.jp/
JAG ACM-ICPCのOB/OG会が開催するプログラミングコンテストの過去問です。およそ13年分の問題を収録させて頂いています。http://acm-icpc.aitea.net/
JOI 日本情報オリンピックの過去問です。https://www.ioi-jp.org/
VPC 有志が開催したプログラミングコンテストの過去問です。主に立命館大学、北海道大学、大阪大学、京都大学、東京大学などの有志が開催した問題を収録させて頂いています。
PCK 全国高等学校パソコンコンクールプログラミング部門の過去問です。http://web-ext.u-aizu.ac.jp/pc-concours/
UOA 会津大学で開催したプログラミングコンテストの過去問です。

ファインダーでは各プログラミングコンテストの中分類(予選・本選、開催時期など)がカードで表され、サインイン時には進捗を把握することができます。カードを選択することで問題リストのページを展開します。

選択した中分類の問題リストはさらに年度で分類され、年度のカードを選択することで該当問題リストを展開します。各問題はカードで表され、問題IDとタイトルに加え、解答状況(左上のチェックマーク)や統計情報を確認することができます。

また、カード下部のアイコン群からお勧めの数やブックマーク状況を確認することができます。これらはクリックすることで設定・解除を行うことができます。

カードを選択することで問題文ページを開くことができます。問題ページについては次回詳しく解説します。

ブックマーク

チャレンジ問題は、数も多く、様々な分野・レベルの問題を含むため、ファインダーに加えて別途ブックマーク機能と検索機能が用意されています。

まずはブックマーク機能を使ってみましょう。ファインダーを使ってあらかじめ興味のある問題にブックマークを付けておきます。ブックマークした問題にアクセスしたい場合は、ヘッダーメニューの「 チャレンジ」→「ブックマーク」からブックマークのページを開きます。以下のように、ブックマークした問題のリストから直接問題ページにたどり着くことができます。

問題検索

次に、検索機能を使ってみましょう。ヘッダーメニューの「チャレンジ」→「問題検索」から検索ページを開きます。以下のようにページ上部のタブから検索基準を選択します。

基準を選択し、キーワードなどのパラメタを入力後、「検索」をクリックすると、該当する問題が展開されます。現在、以下の基準でチャレンジ問題を検索することができます。

  • タイトル:問題タイトルに含まれるキーワードを指定して絞り込みます。
  • タグ:問題に関連付けられたタグ(フリーのキーワード)を指定して絞り込みます。
  • カテゴリ:問題に関連付けられたカテゴリ―を指定して絞り込みます。カテゴリーは、あらかじめ決められた、「問題」に関するキーワードと「アルゴリズムとデータ構造」に関するキーワードから選択します。
  • ボリューム:問題IDの連番で管理されたVolumeで問題を絞り込みます。オンラインジャッジで用いられている伝統的な検索方法ですが、古い問題から優先的に表示されてしまうデメリットもあります。

今回はAOJへのユーザ登録と、問題の検索方法を解説させて頂きました。ユーザインタフェースは公開されたばかりで、まだまだ改善の余地があると思います。ユーザの皆さまからのご意見・ご要望をお待ちしております。

次回は、オンラインジャッジシステムを用いた学習のメイン活動である、問題を閲覧してプログラムを提出する方法を解説します。

著者プロフィール

渡部有隆(著者)
(わたのべ ゆたか)1979年生まれ。コンピュータ理工学博士。会津大学コンピュータ理工学部情報システム学部門 上級准教授。専門はビジュアルプログラミング言語。AIZU ONLINE JUDGE 開発者。
http://web-ext.u-aizu.ac.jp/~yutaka/