您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
AtCoderの成績表にAJLのScoreを追加します。
// ==UserScript== // @name AJL Score // @namespace http://tampermonkey.net/ // @version 2.2 // @description AtCoderの成績表にAJLのScoreを追加します。 // @author You // @match https://atcoder.jp/users/*/history* // @icon https://www.google.com/s2/favicons?sz=64&domain=atcoder.jp // @license MIT // @grant none // ==/UserScript== (function() { 'use strict'; console.debug("Loading AJL Scores"); const table = Array.from(document.querySelector("#history").rows); const tableTitleElem = document.createElement("th"); tableTitleElem.style["text-align"] = "center"; tableTitleElem.textContent = "AJL"; tableTitleElem.classList.add("sorting"); tableTitleElem.classList.add("ajl"); let tableTitleState = 0; tableTitleElem.addEventListener("click", () => { document.querySelector("th:nth-child(4)").click(); }); table[0].insertBefore(tableTitleElem, table[0].childNodes[5]); const scores = []; table.slice(1).forEach((element) => { const perf = Number(element.childNodes[7].textContent); const ajlScore = Math.round(Math.pow(2, perf / 400) * 1000); const ajlScoreElem = document.createElement("td"); ajlScoreElem.textContent = ajlScore; if(!isNaN(ajlScore)) { scores.push(ajlScore); } const ratingElem = element.childNodes[11]; element.insertBefore(ajlScoreElem, ratingElem); }); const labelEle = document.createElement("label"); labelEle.textContent = "AJL Calculator (Please enter the latest number of doses you would like.) ->"; labelEle.for = "ajl-cal"; const numEle = document.createElement("input"); numEle.type = "number"; numEle.id = "ajl-cal"; numEle.value = table.slice(1).length; const titleEle = document.querySelector("div.col-sm-12:has(h2) #user-nav-tabs"); titleEle.parentNode.insertBefore(numEle, titleEle); numEle.parentNode.insertBefore(labelEle, numEle); const ansEle = document.createElement("p"); titleEle.parentNode.insertBefore(ansEle, titleEle); function getScore(count) { const src = scores.slice(0, count).sort((a, b) => b - a); let sum = 0, cnt = 0; for(let i = 0; i < src.length; i++) { if(cnt == 10) break; if(src[i] == NaN) continue; sum += src[i]; cnt++; } ansEle.textContent = "AJL Score: " + sum; } getScore(numEle.value); numEle.addEventListener("change", () => getScore(numEle.value)); })();