您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Show friend's accepted submissions.
// ==UserScript== // @name atcoder friend problemset // @namespace https://atcoder.jp // @version 0.1 // @description Show friend's accepted submissions. // @author Enucai // @match https://atcoder.jp/* // @connect kenkoooo.com // @connect atcoder.jp // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant GM_xmlhttpRequest // @license MIT // ==/UserScript== let user_list = localStorage.fav; let mp = {}; async function getrate(uid) { if (mp[uid] != undefined) return mp[uid]; let tmp = await fetch("https://atcoder.jp/users/" + uid); let lim = 0; while (tmp.status != 200 && lim <= 5) { tmp = await fetch("https://atcoder.jp/users/" + uid); lim += 1; } let content = await tmp.text(); let pos = content.indexOf('<tr><th class="no-break">Rating</th><td><span'); let rating = "", f = 0; let len = content.length; for (let i = pos; i < len; ++i) { if (f) { if (content[i] >= '0' && content[i] <= '9') rating = rating + content[i]; else break; } else { if (content[i] >= '0' && content[i] <= '9') { rating = rating + content[i]; f = 1; } } } // console.log("getting", uid); mp[uid] = parseInt(rating); return parseInt(rating); } async function GetColorByUser(uid) { // let x = Math.floor(Math.random() * 8); // if (x == 0) return "user-gray"; // if (x == 1) return "user-brown"; // if (x == 2) return "user-green"; // if (x == 3) return "user-cyan"; // if (x == 4) return "user-blue"; // if (x == 5) return "user-yellow"; // if (x == 6) return "user-orange"; // if (x == 7) return "user-red"; let rating = await getrate(uid); if ( rating < 400 ) return 'user-gray'; if ( 400 <= rating && rating < 800 ) return 'user-brown'; if ( 800 <= rating && rating < 1200 ) return 'user-green'; if ( 1200 <= rating && rating < 1600 ) return 'user-cyan'; if ( 1600 <= rating && rating < 2000 ) return 'user-blue'; if ( 2000 <= rating && rating < 2400 ) return 'user-yellow'; if ( 2400 <= rating && rating < 2800 ) return 'user-orange'; if ( 2800 <= rating ) return 'user-red'; } var solved_list = new Array(); var bef; let res_str; let call = 0, rest; async function upd(type) { let str = ""; let str2 = ""; str += "<span style = \"font-size: 16px; color: grey;\">Solved by "; console.log(solved_list, solved_list.length); str2 += " friend"; if (solved_list.length == 0) { if (type == 1) str2 += " (finished)"; } else { str2 += "s"; if (type == 1) str2 += " (finished)"; str2 += ": "; for (let i = 0; i < solved_list.length; ++i) { str2 += "<span class=" str2 += "\""; str2 += (await GetColorByUser(solved_list[i])); str2 += "\""; str2 += ">"; str2 += solved_list[i]; str2 += "</span>"; if (i != solved_list.length - 1) str2 += ", "; } } str = str + solved_list.length + str2 + ".</span>"; document.querySelector(`#main-div > div.container > div.row > div:nth-child\(2\) > span`).innerHTML = bef + str; } async function check(uid, pid, bt) { console.log(uid); GM_xmlhttpRequest({ method: 'GET', url: 'https://kenkoooo.com/atcoder/atcoder-api/v3/user/submissions?user=' + uid + '&from_second=' + bt, onload: async res => { const data = JSON.parse(res.responseText); if (data.length == 0) { rest -= 1; console.log(rest); if (rest == 0) await upd(1); return; } let lstt = 0; for (let val of data) { lstt = val.epoch_second; if (val.problem_id == pid && val.result == 'AC') { solved_list.push(uid); await upd(0); // console.log("ok"); rest -= 1; console.log(rest); if (rest == 0) await upd(1); return; } } await check(uid, pid, lstt + 1); }, onerror: () => { return; } }); } (async function() { 'use strict'; user_list = JSON.parse(user_list); console.log(user_list); const url = location.href; let pid = "", cnt = 0; for (let i = 0; i < url.length; ++i) { if (url[i] == '/') cnt++; else if (cnt >= 6) pid += url[i]; } // console.log(pid); let problem_info = document.querySelector(`#main-div > div.container > div.row > div:nth-child\(2\) > span`).innerHTML; bef = document.querySelector(`#main-div > div.container > div.row > div:nth-child\(2\) > span`).innerHTML + "</br>"; res_str = bef; rest = user_list.length; // console.log(bef); for (let i = 0; i < user_list.length; ++i) { let uid = user_list[i]; await check(uid, pid, 0); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址