About
AtCoder Companions とは
AtCoder Companions は、競技プログラミングサイト AtCoder の過去問埋め (upsolve) を強力に支援する、非公式の Web サービスです。@kakira9618 が開発・運営しています。
コンセプト
みんなのWAが、あなたのACに。
AtCoder Companions は、指定された WA/RE/TLE/MLE の提出と「同じ間違え方(= 各サンプルケースにおけるジャッジ結果の配列が等しい)」 をしている提出から、最終的にACになった提出を抽出し、それらの差分を見やすく表示することで、upsolve の支援をします。
特徴
1. 簡単に使える / Easy to use
AtCoder Companions は、現在 WA/RE/TLE/MLE となっている提出のURLをコピペするだけで使うことができます。
2. 最短でACにたどり着く / The shortest way to AC
AtCoder Companions は、「指定された提出と同じ状況に陥った他の提出をACさせるための差分」を表示するため、AC への具体的な道筋が得られます。
3. 高速検索 / Speedy search
AtCoder Companions は、クロールによって得られたインデックスを使用して検索を行うため、高速に結果を得ることができます。
4. みんなにやさしく / Kind to everyone
- AtCoder Companions は、PC/タブレット/スマホ など多種多様なデバイスに対応しています。
- アクセシビリティや色覚特性を意識し、視覚に関する情報の一部がなくても情報が得られるようにデザインされています。
- クロールは AtCoder にできるだけ負荷を与えないように配慮されています。
- 徹底したコスト削減により、製作者のお財布にもやさしい (予定) です。
解決する課題
AtCoder Companions は、upsolve に関わる以下のような課題を解決する強力な手がかりを提供します。
- 解法は合ってるはずなのに何故かWAが出る
- サンプルは通るのに一部ケースだけ何故か通らない
- どのようなケースで落ちているのかわからない・知りたい
- 修正の仕方が分からない
- upsolve に無限の時間がかかるのをどうにかしたい
使い方
調査する提出の URL をコピーする
AtCoder のコンテストサイトにおける WA/RE/TLE/MLE の提出のURLをメモします。
対応しているコンテストは、Crawling Status ページから確認できます。
指定する提出は自分のものでも他ユーザのものでも構いませんが、AtCoder で Public に公開されている必要があります。
URLをトップページにペーストし、Findを押す
次に、控えたURLを AtCoder Companions の Top
ページに入力し、Find ボタンを押します。
結果を確認する
Result Vector は 今回検索対象となる「各テストケースにおけるジャッジ結果の配列」です。AtCoder Companions はこれと同じ Result Vector を持つ「他人」の提出を検索します。
Statistics は統計情報です。
- All Submissions: 指定した提出のコンテストにおいて、AtCoder Companions が知っている (クロール済みの) 提出の数です
- Companions: 指定した提出と同じ Result Vector を持った、指定した提出のユーザ以外の提出の数です。(問題ID, ユーザID, Result Vector) の3つ組が同じ提出は1つの提出として数えられます。
- AC Companions: Companions の中で、最終的に AC となった提出の数です。
Companions Diff がメインの情報です。
- PREV, NEXT ボタン: 他の AC Companions の情報を見ます
- Split View: チェックを入れると Diff が削除分と追加分に分離されて表示されます
- Language: AC提出の言語でフィルタを行います。All でフィルタ無し(全件表示)となります
- Diff: メインの情報です。赤くハイライトされた (
-
の行の) 部分が削除、緑にハイライトされた (+
の行の) 部分が追加部分です。Split View が有効な場合、左側が WA/RE/TLE/MLE の提出、右側が ACの提出です。
提出の詳細情報を確認する
Companionの元の提出のURLなど、提出の詳細情報を確認したい場合は、こちらから確認します。
ボタンまたは提出IDを押すと提出に (別タブを開いて) 飛ぶことができます。また、コンテストページや問題ページに飛ぶこともできます。
Twitter で Share する
Twitter でシェアする用の URL を発行することができます。
ツイートされるURLは、現在表示されている AC Companions の Diff を表すものとなります。こちらのボタンからツイートしてくださると助かります。
Token について
サイトの仕様上、無制限に機能を実行できてしまうと、AtCoder のサーバーと開発者のお財布に負担がかかってしまうため、各機能が実行できる回数は制限されています。
Tokenの入力をしない状態 (初期状態 = Basic) でもサービスの利用が可能ですが、Find Companions (Companions一覧を得る操作) が実行できる回数と、Fetch Submission (提出の詳細を得る操作) が実行できる回数が強めに制限されます。2022/12/11 現在の具体的な制限は以下の表を参照してください。
Token 種別 | Find Companoion | Fetch Submission | 料金 | 備考 |
---|---|---|---|---|
Basic | 5 [回/日] | 100 [回/日] | 無料 | 初期状態での制限です |
Verified | 10 [回/日] | 200 [回/日] | 無料 | アンケートフォームの記入が完了している方に配布している Token です |
Verified-tester | 20 [回/日] | 500 [回/日] | 無料 | Testerとして参加していただいた方に配布している Token です |
現在の Token 情報は、ページ Settings
から確認できます。
Tokenの種別を変更するには、アンケートフォーム に記入をお願いいたします。
また、Tokenを他人には譲渡しないようにお願いいたします。
クロールについて
AtCoder Companions では、AtCoder の提出情報をクロール (Crawling) しインデックスを生成することで、高速に Companions 情報を検索することを可能にしています。
コンテストのクロールが完了していない場合、そのコンテストに対する情報は提供できません。
クロールの進捗状況は、Crawling Status
ページで確認することができます。
- Prefix Search by Contest ID: コンテストIDを前方一致でフィルターすることができます。
- Contest ID: クロールしたコンテストのID
- Crawling Status: 現在のクロール進捗。完了したページ数単位で表示されます
- Crawling Started at: クロールを開始した時刻。この時刻以前に提出された提出をクロール対象とします
また、クロールに関わるポリシーについては、ページCrawling Policy
を参照してください。
新しいコンテストのクロール開始時期・時間について
新しいコンテストが開催され終了した場合、そのコンテストの情報をクロール開始するまで、12〜24時間以上の間隔を開けています。(現在、手動で新規コンテストのクロール開始処理を行っているため、時間は大きく変動することがあります)
これには、
- コンテスト後すぐにクロールを開始すると AtCoder に負荷がかかる
- コンテスト開催直後は after_contest のテストケースの追加などが多い
- コンテスト終了後の提出にはACが多く、少し待つことでより質の高いクロールを行うことができる
- ユーザが問題をじっくり考える時間を確保したい。
などの理由があります。
また、高頻度なクロールを避けつつ、数万オーダーの数の提出のクロールを行うため、1つのコンテストのクロールには概ね6〜24時間程の時間がかかります。ご承知ください。
細かい仕様
Companions Diff のソート順
AC 提出の時刻の昇順です。理由は
- シンプルであること (レートなど、他のリソースを見に行く必要がないこと)
- ACの早さと実力に正の相関があるとするのが自然と思われること
です。
同じ Result Vector を持つ提出が複数、ACの提出が複数ある場合
できるだけ本質的な差分表示を行うため、差分表示では以下のように提出を選択しています。
- 同じ Result Vectorを持つ WA/RE/MLE/TLE の提出が複数ある場合、差分表示では最新のものが採用されます。
- ACの提出が複数ある場合、差分表示では最古のもの(最初に提出したAC)が採用されます。
after_contest テストケースの取り扱いについて
最初のクロール開始時に after_contest のテストケースが追加されていた場合、最初から after_contest のテストケース込みの検索を行います。
最初のクロール開始時には after_contest のテストケースがなく、クロール後に after_contest のテストケースが追加された場合、
基本的に、再クロールするまでは、after_contest のテストケースの結果を無視して Companions を検索します。
より正確には、クロール済情報におけるテストケースの組の多数派が Companions の検索時に採用されることになっています。
なお、現在は、再クロールの開始処理は手動で行われています。
用語集
Result Vector
各テストケースに対するジャッジ結果の配列
Companions
Result Vector が等しい自分以外の提出、またはその提出を行ったユーザ。自分自身を除く。
AC Companions
Companions の中で最終的に AC となった提出、またはそのユーザ
Token
利用者判別及び機能制限を行うための情報
Special Thanks (敬称略)
βテストに参加してくださった方々
AtCoder Companions のアイデア面・機能面・UI/UX面などについて意見をいただきました。ありがとうございます!
Amazon Web Services (AWS)
AtCoder Companions の大部分は AWS のインフラで提供されています。大変お世話になっております。
AtCoder
AtCoderがなければこのサービスは存在しませんでした。 素晴らしいコンテストをいつもありがとうございます。
問い合わせ先
@kakira9618 までお願いいたします。