これは AtCoder 関連サービス Advent Calendar 2018 の11日目の記事です。
過去に作った UserScript の atcoder-traffic を紹介します。
この UserScript を使うと、 AtCoder の無印 ( atcoder.jp ) と beta 版 ( beta.atcoder.jp ) を簡単に行き来できるようになります。
##作ったきっかけ
きっかけといっても何か特別なことがあったわけではなく、ただ無印と beta 版の移動が楽にできればいいと思って作りました。
いちいち URL のコンテスト名をコピーして beta 版に移動したり無印に移動したりしていては面倒なので。
え?移動しなくてもいいじゃないか、って?
いやいや、移動しないと不便なことも多いんです。
まず、 beta 版は無印に比べて色々と便利なものが増えています。
順位表で表示項目を色々と設定できたり、コンテストの参加登録を取り消しできたり。
提出画面やコードテストに直接プログラムを入力することもでき、問題画面から直接提出もできます。
また、巷の UserScript は多くが beta 版向けで作られています。
beta 版最高!!!
ですが、「 beta 版だけで十分!」とはいきません。
まず、一部の企業コンテストでは beta 版から参加ができません。年齢とかを参加登録時に聞かれるコンテストです。そういう時に無印を使います。
そして、...あれ?これだけ?
しかも、今はそういうコンテストの場合、 beta 版に「旧システムで参加登録」ボタンが付くようになってるはず。
だけど当時はこの「旧システムで参加登録」ボタンとか AtCoder Scores とかいろんなものがまだ beta 版対応してなくて、それでこれを作ったっていう記憶があります。
でも今はもう対応してるし、じゃあこの UserScript いらないんじゃないの?
え、あ、でも、無印と beta 版を行き来できたら便利じゃない。ほら、コンテスト前の微妙な時間に無印と beta 版をひたすら行き来したりとか、
それにさ、こういうのってあっても損はしないよね、ね、
あと、ええと、あ!そうだ! joi.goodbaton.com が beta 版に対応してないから、このページから AtCoder の問題ページに飛んだ時でも beta 版を簡単に使えるようにするために使える!
説明しよう! joi.goodbaton.com とは、日本情報オリンピック ( 通称JOI ) の過去問を難易度順に探すことができるサイトなのだ!
##機能
atcoder-traffic の URL → greasyfork.org/ja/scripts/370878-atcoder-traffic
一番最初のところに少しだけ書きましたが、無印と beta 版を簡単に行き来することができます。
- 上に書いてある URL からインストールします。
- どこでもいいので AtCoder のコンテストページに行きます。( beta 版でもそうでない方でもどちらでもOK )
- 一番上の方にあるコンテスト名をクリックします。( 黒い背景の部分、これ以降はバナーと呼びます 一部のコンテストだとピンク色だったり黒じゃない )
- もともと無印にいたなら beta 版へ、beta 版にいたなら無印に飛べます。
これだけです。あと、JOIに関する機能も一つありますが、それに関しては atcoder-traffic の URL の方の説明を読んでください。ここでは話しません。
##仕組み
正規表現を使って、無印にいるのか beta 版にいるのかを判定します。
正規表現を使って、コンテスト指定の文字列 ( abc114 や code-festival-2018-final-open など ) を抽出します。
そして、バナーのコンテスト名の部分のリンク先を書き換えます。
正規表現様様です。
あとは、無印と beta 版の構造が違うので ( beta 版は問題一覧が .../tasks だけど、無印は .../assignments だったりとか ) 、それも書き換えます。正規表現で。
今のページが問題一覧ページなのか提出ページなのかとかの判定も正規表現でゴリ押してます。
「機能」のところでは言いませんでしたが ( 言い忘れるとかそんなことするはずないじゃないですか ) 、無印の方には、バナーにある開始時刻や終了時刻をクリックすると timeanddate.com に飛べます。
こんな機能使うはずがないんですが、無印のバナーの部分はデフォルトではコンテスト名と時刻が同じボタンに含まれていて、そのまま beta 版に飛ぶようにすると時刻の部分をクリックしても beta 版の方に飛ぶようになってて、少し気に入らなかったのでボタンを2つに分割して、ついでに時刻の方は timeanddate.com に飛ぶようにした、というわけです。
##最後に
先ほども言った通り、この UserScript を入れたからと言って損はしません。(多分)
元々(多分)あまり意味のないバナーを使ったので機能が減ることはなく、既存のバナーのリンク先を変えただけなので見た目は全く変わりません。
というわけで、是非この UserScript を使ってみてください。
再掲になりますが、atcoder-traffic のリンク先です → greasyfork.org/ja/scripts/370878-atcoder-traffic