LoginSignup
3
1

More than 5 years have passed since last update.

AtCoder Problemsのソートを改善した話

Last updated at Posted at 2018-12-23

AtCoder関連サービス Advent Calendar 2018 24日目です。

Introduction

開始時間だけをキーとすると、開始時間が同じ複数コンテストがばらばらになってしまうし、問題順もうまくソートされない。[startEpochTime, contest.title, problem.title]をキーとして比較するしかないように思える。

Pull Request

UserScript

以下より試せます。UserScriptだけだとどうしても/atcoder/dist/bundle.jsを読みに行ってしまうようなのですが、documentElementをいじるようにすればうまくいくっぽい。

// ==UserScript==
// @name        AtCoder Problems Sorter
// @namespace   com.cielavenir
// @description AtCoder Problems Sorter
// @include     https://kenkoooo.com/atcoder/*
// @run-at      document-start
// @version     0.0.0.1
// ==/UserScript==

(function(){
    var src='https://gistcdn.githack.com/cielavenir/8923c3437dd694f882bbe9fe2f9ec3b8/raw/067dbe108490897cd70c8cf6d543913ffb0a1968/bundle.js';
    var scr=document.createElement('script');
    scr.src=src;
    document.documentElement.appendChild(scr);
    //document.addEventListener('DOMContentLoaded',function(){
    //  var scrs=document.getElementsByTagName('script');
    //  for(var i=0;i<scrs.length;i++)if(scrs[i].src.indexOf('bundle')>=0)scrs[i].src=src;
    //});
})();

開発中は、srcにlighttpdなlocalhostを指定してました。bundle.jsはreadmeに書いてあった方法で生成しました。

参考:arc096周辺を表示した図

左:Firefox(UserScript未適用) 右:Google Chrome(UserScript適用済)

左ではコンテストの開始時間が同一のARC/ABCエントリが混ざってしまっていることがわかります。

arc096.png

余談

私、度重なる改善要求のためか、氏からブロックされているのですが、その改善要求の主なものは、今回解決したソートの問題、およびまれにAtCoderの提出を取りこぼすことがあるのの2点です。後者、気にする人は少ないかもしれませんが、ゴルファーである私には死活問題なのですよ…スクレイピングの話だからクライアントサイドで直せませんしね…

190107追記

とりあえずEducational DP ContestのAC者数が全く異なっていて、よくよく見てみたらFA者も一部間違っているということはわかった(本来の一覧)
取得が重たいからということはわかるんですが、なんとかなるまではブロックを解除してもらいたい気持ちも起こらないですね…

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1