// ==UserScript== // @name cdwswb // @namespace http://tampermonkey.net/ // @version 1.0.0 // @description 为收藏的题目添加评分 // @author cww // @match https://codeforces.com/favourite/* // @icon https://www.google.com/s2/favicons?sz=64&domain=bilibili.com // @grant GM_xmlhttpRequest // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/511567/cdwswb.user.js // @updateURL https://update.greasyfork.icu/scripts/511567/cdwswb.meta.js // ==/UserScript== (function() { 'use strict'; async function getUserFavorites() { let g = []; let table = document.querySelector('.problems'); let rows = table.querySelectorAll('tr'); for (let i = 1; i < rows.length; i++) { let row = rows[i]; var s = row.children[0].querySelector('a').textContent.replace(/\s+/g, ''); var num = ""; var c = ""; var j = 0; while (j < s.length && s[j] >= '0' && s[j] <= '9') { j += 1; } num = s.substr(0, j); c = s.substr(j); g.push({ contestId: parseInt(num), index: c }); } return g; } async function getFilteredProblems(favoriteIds) { const url = "https://codeforces.com/api/problemset.problems"; try { const response = await fetch(url); const data = await response.json(); if (data.status === "OK") { const problems = data.result.problems; const problemMap = {}; problems.forEach(problem => { problemMap[`${problem.contestId}${problem.index}`] = problem; }); return favoriteIds.map(favorite => { const problem = problemMap[`${favorite.contestId}${favorite.index}`]; if (problem) { return { ...problem, rating: problem.rating || Infinity }; } return { ...favorite, rating: Infinity }; }); } else { console.error("Error fetching problems:", data); } } catch (error) { console.error("Fetch error:", error); } return []; } // 主程序 getUserFavorites().then(favoriteIds => { getFilteredProblems(favoriteIds).then(filteredProblems => { console.log(filteredProblems); let table = document.querySelector('.problems'); let rows = table.querySelectorAll('tr'); // 动态创建