Add links to the AtCoder task page that open a list of submissions for the current task with custom filters applied.
AtCoderの各問題ページのタブメニューに対して、任意のクエリパラメータと、&f.Task=${開いている問題のID}
を適用した状態で「すべての提出」ページを開くリンクを追加するユーザースクリプトです。
デフォルトでは、その問題の全ての AC 提出を実行時間の短い順に表示する「Fastest」と、全ての AC 提出をコード長順に表示する「Shortest」の 2 つのリンクが追加されます。
コンテスト期間中の問題や、A - Welcome to AtCoder などの、他ユーザーの提出が公開されていないような問題に関しては、本スクリプトで追加するタブは表示されないようにしています。
ユーザースクリプトマネージャは Tampermonkey の使用を推奨します。
スクリプト上部にある配列 linkSettings
を編集してください。
const linkSettings = [{label: "Fastest",icon: "time",urlParams: "f.Status=AC&orderBy=time_consumption",},{label: "Shortest",icon: "flag",urlParams: "f.Status=AC&orderBy=source_length",},];
label
がボタンのラベル、icon
がラベル左に表示されるアイコン、urlParams
が「すべての提出」ページのURLへ適用されるクエリパラメータになります。
label
ボタンのラベルです。日本語も設定できます。
icon
ラベル左に表示されるアイコンです。
ここには、Bootstrap Glyphicons のアイコン名を入力します。glyphicon glyphicon-plus
を使用したい場合は、単に plus
と入力してください。
どんなアイコンが使用できるかは Bootstrap Glyphicon Components を参照してください。
urlParams
各タブのリンク先URLへ適用されるクエリパラメータになります。
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=
は空の要素で不要なため削除しています。残っていてもこのケースにおいては問題ありません。)
以下に、linkSettings
の設定例を示します。
デフォルトのボタンを、機能はそのままに日本語のラベルにしたものです。
{label: "最速コード",icon: "time",urlParams: "f.Status=AC&orderBy=time_consumption",},{label: "最短コード",icon: "flag",urlParams: "f.Status=AC&orderBy=source_length",},
ただしこのラベルのままだと、多くの環境でメニュータブが複数行で表示されてしまうと思います。
気になる方はラベルを短くするか、後述するスクリプトを使用して「バーチャル順位表」タブを非表示にしてみてください。
{label: "C++",icon: "knight",urlParams: "f.Status=AC&orderBy=time_consumption&f.LanguageName=C%2B%2B",},
{label: "Rust",icon: "knight",urlParams: "f.Status=AC&orderBy=time_consumption&f.LanguageName=Rust",},
{label: "Python 3",icon: "knight",urlParams: "f.Status=AC&orderBy=time_consumption&f.LanguageName=Python3",},
「すべての提出」ページには、コンテスト中や終了後の提出はもちろん、公開されているものであれば、Writer さんなどによるコンテスト開始前の提出も表示されるため、この方法で表示される最も古い提出と、順位表における最速正解者の提出 (FA) は一致しない場合がほとんどだと思います。
{label: "FA",icon: "ok-sign",urlParams: "f.Status=AC&orderBy=created",},
提出日時が古い順で WA 提出を表示します。これにより First Wrong Answer が分かります。
(コンテストに出ているだけで素晴らしいので、くれぐれも悪用しないようにしましょう。)
{label: "FW",icon: "remove-sign",urlParams: "f.Status=WA&orderBy=created",},
なお、こちらも同様に、必ずしもコンテスト中の提出とは限らないため注意が必要です。
その問題に対する tourist の提出一覧を表示します。
{label: "tourist",icon: "remove-sign",urlParams: "f.User=tourist",},
長いラベルを持ったボタンを追加したり、いくつもボタンを追加したりすると、ページを 100% で表示していてもタブメニューが複数行で表示されてしまう事があると思います。そういった場合、タブメニューの中でも結構な幅を占めていて、かつあまり使用頻度の高くない「バーチャル順位表」タブをを非表示にしてみてもよいかもしれません。
バーチャル順位表タブを非表示にしたい場合、以下のユーザースクリプトが使用できます。
AtCoder Hide Virtual Standings Tab
このスクリプトでは、問題ページでのみバーチャル順位表タブを非表示にします。他のコンテストページでは通常通り表示されるので、常時有効化しておいても特に困らないと思います。
本スクリプトに関するご連絡は @xero_cats へお願いいたします。
不具合やご意見などありましたら、お気軽にご連絡ください。GitHubリポジトリ への Issue の作成、Pull request もお待ちしております。