AtCoder Add Submissions Shortcuts
概要
AtCoderの各問題ページのタブメニューに対して、任意のクエリパラメータと、&f.Task=${問題ID}
を適用した状態で「すべての提出」ページを開くリンクを追加します。
デフォルトでは、全ての AC 提出を実行時間の短い順に表示する「Fastest」と、全ての AC 提出をコード長順に表示する「Shortest」の 2 つのリンクが追加されます。
ボタンを編集・追加する方法
スクリプト上部にある buttonSettings
オブジェクトを編集してください。
const buttonSettings = {
fastest: {
label: "Fastest",
icon: "time",
urlParams: "f.Status=AC&orderBy=time_consumption&f.LanguageName=Python3",
},
shortest: {
label: "Shortest",
icon: "flag",
urlParams: "f.Status=AC&orderBy=source_length",
}
};
プロパティ label
がボタンのラベル、icon
がラベル左に表示されるアイコン、urlParams
が「すべての提出」ページのURLへ適用されるクエリパラメータになります。
label
プロパティ
label
の値には日本語も設定できます。キーの名前と必ずとも一致させる必要はありません。
icon
プロパティ
icon
には Bootstrap Glyphicons のアイコン名を入力します。
glyphicon glyphicon-plus
を使用したい場合は、単に plus
と入力してください。
どんなアイコンが使用できるかは Bootstrap Glyphicon Components を参照してください。
urlParams
プロパティ
urlParams
には、/submissions?
より後ろのパラメータを入力してください。
実際に AtCoder で適当なコンテストの「すべての提出」ページを開いて任意のフィルターや並び順を設定し、その状態の URL を元に編集する方法が最も簡単だと思います。
例えば、ABC294 のすべての提出 を「言語: C++」「結果: AC」 で絞り込み、実行時間順に並び替えた場合、URL は以下のようになります。
https://atcoder.jp/contests/abc294/submissions?f.LanguageName=C%2B%2B&f.Status=AC&f.Task=&f.User=&orderBy=time_consumption
ここから、以下のように /submissions?
以前と &f.Task=
、必要に応じて不要な要素を削除したものが 実際に urlParams
へ入力する値です。
f.LanguageName=C%2B%2B&f.Status=AC&orderBy=time_consumption
(&f.User=
は空の要素で不要なため削除しています。残っていてもこの方法においては問題ありません。)
使用例
ボタンのラベルを日本語にする
デフォルトのボタンを、機能はそのままにラベルを日本語にしたものです。
fastest: {
label: "最速コード",
icon: "time",
urlParams: "f.Status=AC&orderBy=time_consumption&f.LanguageName=Python3",
},
shortest: {
label: "最短コード",
icon: "flag",
urlParams: "f.Status=AC&orderBy=source_length",
}
ただしこのラベルのままだと、多くの環境でメニュータブが複数行で表示されてしまうと思います。
気になる方はラベルを短くするか、後述するスクリプトを使用して「バーチャル順位表」タブを非表示にしてみてください。
C++ の AC 提出を実行時間順で表示
fastestCpp: {
label: "C++",
icon: "time",
urlParams: "f.Status=AC&orderBy=time_consumption&f.LanguageName=C%2B%2B",
}
Python 3 の AC 提出を実行時間順で表示
fastestPy: {
label: "Python 3",
icon: "time",
urlParams: "f.Status=AC&orderBy=time_consumption&f.LanguageName=Python3",
}
提出日時が古い順で AC 提出を表示
「すべての提出」ページには、コンテスト中や終了後の提出はもちろん、公開されているコンテスト開始前の提出も表示されるため、最も古い提出と、順位表における最速正解者の提出は一致しない場合がほとんどだと思います。
firstAC: {
label: "最速 AC",
icon: "time",
urlParams: "f.Status=AC&orderBy=created",
}
最速 WA
提出日時が古い順で WA 提出を表示します。これにより First Wrong Answer が分かります。
コンテストに出ているだけで素晴らしいので、くれぐれも悪用しないようにしましょう。
firstWA: {
label: "最速 WA",
icon: "time",
urlParams: "f.Status=WA&orderBy=created",
}
なお、こちらも同様に、必ずしもコンテスト中の提出とは限らないため注意が必要です。
バーチャル順位表の非表示
長いラベルを持ったボタンを追加したり、いくつもボタンを追加したりすると、ページを 100% で表示していてもタブメニューが複数行で表示されてしまう事があると思います。
そういった場合、タブメニューの中でも結構な幅を占めていて、かつあまり使用頻度の高くない「バーチャル順位表」タブをを非表示にしてみてもよいかもしれません。
コンテストにバーチャル参加する際も、バーチャル参加登録のページからバーチャル順位表へ飛べるので、個人的には非表示にしてもあまり困らないと思っています。
バーチャル順位表の非表示にしたい場合、以下のユーザースクリプトが使用できます。
AtCoder Hide Virtual Standings Tab
連絡先・リポジトリ
本スクリプトに関するご連絡は @xero_cats へお願いいたします。
不具合やご意見などありましたら、お気軽にご連絡ください。
GitHubリポジトリ への Issue の作成、Pull request もお待ちしております。