-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
51 lines (43 loc) · 1.51 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// ==UserScript==
// @name AtCoder-RedirectRecentABC
// @namespace https://github.com/PenguinCabinet
// @version v0.0.1
// @description The tools to redirect the recent AtCoder Beginner Contest.
// @author PenguinCabinet
// @license MIT
// @match https://atcoder.jp/contests*
// @grant none
// ==/UserScript==
//config
//config
async function Newest_N(elem_id1, elem_id2) {
const r = /AtCoder Beginner Contest ([1-9][0-9]*)/g;
const contests_HTML_text = await (await fetch("https://atcoder.jp/contests/")).text();
const doc = new DOMParser().parseFromString(contests_HTML_text, "text/html");
let elem = doc.getElementById(elem_id1);
if (!elem) {
elem = doc.getElementById(elem_id2);
}
const text = elem.outerHTML;
const ABC_texts = [...text.matchAll(r)];
const Numbers = ABC_texts.map((e) => parseInt(e[1]));
return Math.min.apply(null, Numbers);
}
(async function () {
'use strict';
let urlHash = location.hash;
if (urlHash) {
const r = /#recent_abc((\-|\+)[1-9][0-9]*)?/;
const result = urlHash.match(r);
if (result != null) {
let Ans = await Newest_N("contest-table-action", "contest-table-upcoming");
let diff = result[1];
if (diff === undefined) diff = 0;
diff = parseInt(diff, 10);
if (Ans != null) {
window.location.replace(`https://atcoder.jp/contests/abc${Ans + diff}`);
}
}
}
// Your code here...
})();