HackerRankでコンテストを主催する方法

競技プログラミングの世界では,様々なサイトでコンテストが開かれています.具体的には,AtCoderCodeForcesなどです.その中でも,HackerRank(ハッカーランク)というサイトは,自分でコンテストを開けることが特徴です.今回はその具体的な方法について説明します.

なお,ハッカーランクへの登録は済んでいるものとします.

www.hackerrank.com

目次

大まかな流れ

コンテストの作成にあたっては,以下の4つのステップで行えます.
1. コンテストを作成する
開始時間など,コンテストの詳細を決めます.
2. 問題を作成する
実際に解かれる問題を作成します.
3. コンテストに問題を登録する
1.で作成したコンテストに,2.で作成した問題を登録します.
4. 参加URLを配布する
コンテストの参加者に,参加用のURLを配布します.

コンテストを作成する

まずは新しいコンテストを作成します.自分のユーザーIDからプルダウンされるメニューから,Administrationを選びます.

f:id:gotutiyan:20200103224923p:plain

次に,緑のボタンのCreate Contestを選びます.
f:id:gotutiyan:20200103225026p:plain

次の画面ではコンテストの情報を入力します.これらの情報は,後からでも変更できます.
* Contest Name: コンテストの名前です.
* Start Time: コンテストの開始時間です.日をカレンダーから,時間を15分刻みで設定できます.
* End Time: コンテストの終了時間です.Start Timeと同じ要領で,時間を設定します.
* Organization Type: 組織の形式を選びます.よく分からなければ,otherで良いでしょう.
* Organazation Name: 組織の名前を入力します.

これで,コンテストの作成は完了です.

問題を作成する

問題情報の作成

ここでは,実際にコンテストに出題する問題を作成します.

まずは,コンテストの作成と同じようにAdministrationを選びます.

f:id:gotutiyan:20200103224923p:plain

次に,Manage Challengeのタブを選び,緑のボタンのCreate Challengeを選びます.

f:id:gotutiyan:20200103183350p:plain

その後,問題の情報を入力します.全ての欄を埋めないと完了できないので注意してください.また,ほとんどの欄では,$\frac{a}{b}$などのTex形式の数式表記をサポートしています.
* Challenge Name: 問題名です.
* Description: 問題の説明ですが,特に公開されないので,自分向けの説明を書きます.
* Problem Statement: 問題文です.
* Input Format: 入力形式です.
* Constraints: 入力の制約です.
* Output Format: 出力形式です.
* Tags: 問題のタグです.1D-arrayなど,主に解法に関するものです.

以上で,コンテスト情報の作成は終了です.

テストケースの作成

次にテストケースの作成に入ります.これはTest Casesのタブで行えます.

f:id:gotutiyan:20200103185413p:plain

テストケースの追加は,ブラウザ上で行う方法と,ファイルアップロードによる方法の2通りの方法で行えます. また,これより先では,既にテストケースとなる入出力のセットは作成済みであるものとしています.

1. ブラウザ上で行う方法
この方法は,ブラウザ上で行えるので直感的に分かりやすい方法です.しかし,あまり大きなデータはこの方法ではアップロードできないため,その場合は2.の方法を用いる必要があります.

まず,緑色のボタンのAdd Test Case を選びます.

f:id:gotutiyan:20200103225227p:plain

そして,inputとoutputの欄に,用意した入出力のセットをそれぞれ貼り付けます.

f:id:gotutiyan:20200103233029p:plain

また,用意したテストケースのうち少なくとも1つは,サンプルとして設定しなければなりません.これは,上部に表示されるSampleのチェックボタンをクリックすることで行えます.サンプルに設定したテストケースは問題文中に表示されるため,できるだけ簡単な(=サイズの小さい)データを用いたテストケースが望ましいです.

以上の操作を,用意したテストケースの数だけ行います.

2. ファイルアップロードによる方法
この方法の利点は,複数のテストケースを一度にアップロードできる点や,データのサイズが非常に大きくなってもアップロードできる点です.

まずは,Upload Zipを選びます.

f:id:gotutiyan:20200103234239p:plain

次に,この方法を使えば,既にアップロードされているテストケースは消滅しますがよろしいですか?という内容のダイアログが出てくるので,Continueを選びます.

その後,zipファイルを選択すれば,作業は終了です.

f:id:gotutiyan:20200103234957p:plain

このときのzipファイルは,inputフォルダとoutputフォルダを中身に持つものでないと受け付けてくれません.さらに,inputのフォルダには必ず"input+数字"で始まるファイル(input01.txt など),outputのフォルダには"output+数字"で始まるファイル(output01.txt など)を置く必要があります.この時,input01.txtとoutput01.txtのように,同じ数字を含むファイル同士が入出力のセットとして扱われます.

f:id:gotutiyan:20200104000413p:plain

以上で,問題の作成は完了です.

コンテストに問題を登録する

いよいよ,先ほど作った問題をコンテストで出題する問題として設定します.

再びAdministrationから,対象のコンテストの管理画面に行きます.そして,Challengesのタブに移動します.

f:id:gotutiyan:20200104001501p:plain

次にAdd Challengeのボタンを押して,Nameのところに問題のタイトルを打ちます.そうすれば,問題の名前が推薦されるので,それを選びます.

f:id:gotutiyan:20200104001636p:plain

この作業を,出題する問題の数だけ繰り返します.これにより,コンテストに問題を登録できました.

参加URLを配布する

作ったコンテストに参加して,問題を解いてもらうためには,コンテストのURLを配布する必要があります.参加URLは,コンテストの管理画面に表示されているURLのことです.これを参加予定の人たちに配布し,コンテストの開始を待ってもらってください.

f:id:gotutiyan:20200104002137p:plain

このURLを踏めば,コンテストの開始時間までのカウントダウンがされているような画面に飛ばされます.参加者には,この画面で待機してもらってください.開始時間になれば,自動的に問題を解くことができるようになります.

以上で,コンテストの開催方法についての説明は終わりです.

発展的な設定

ここからは発展ですが,コンテストに関する詳細な設定についてです.

リーダーボードにおける順位づけについて

この設定は,コンテスト管理画面のAdvanced Settingsタブより行えます.
リーダーボードとはつまり順位表です.順位づけの方式は,以下の2つから選択できます.

  1. ハッカーランクのデフォルトのリーダーボード
  2. ACM形式のリーダーボード

筆者が2.しか使ったことがないので1.については分かりませんが,2.はICPC形式で,解いた問題数が多いほど勝利,問題数が同じ時,回答時間が早い方が勝利,というものになります.誤答した時のペナルティや,順位表の凍結に関する設定もできます.

言語ごとの実行時間制限の編集

実行時間制限は,問題ごとに行えます.よってこの設定は,問題の管理画面の,Languagesタブより行えます.

各言語について時間とメモリの制限をシークバーにより入力し,必ず右上の保存のボタンを押して終了してください.各パラメータは上限と下限が決められているので,無限に時間をかけても良い,というような設定はできません.

f:id:gotutiyan:20200104161139p:plain
時間とメモリの設定(四角囲み)と,保存ボタン(矢印)

モデレータの説明とその追加

コンテストの開催にあたっては,出題予定の問題を本当に解けるかどうかを確かめる必要があります.この作業には作問者だけではなくて,少なくとも1人は別の人を呼んできて行うのが望ましいです.モデレータの機能を使えば,このような問題の確認作業が簡単に行えます.

モデレータは,コンテストと問題の両方でつけることができます.具体的には,コンテスト管理画面,もしくは問題の管理画面のModeratorsタブで,モデレータにしたい人のIDを入力します.

f:id:gotutiyan:20200104164745p:plain

問題に対してモデレータに登録された人は,その問題の編集権,およびソースコードの提出が行えます.また,コンテストに対してモデレータに登録された人は,そのコンテスト情報の編集権,およびコンテストに登録された各問題に対してソースコードの提出が行えます.これらはもちろん,コンテストの開始時間の前でも行えます.

終わりに

今回は,HackerRankでコンテストを開催するための方法について解説しました.

www.hackerrank.com