您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
为收藏的题目添加评分
- // ==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
- // ==/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');
- // 动态创建 <th> 和按钮
- const newTh = document.createElement('th');
- const sortButton = document.createElement('button');
- sortButton.textContent = 'ASC'; // 设置按钮文本
- sortButton.id = 'sortButton'; // 设置按钮 ID
- newTh.appendChild(sortButton);
- rows[0].insertBefore(newTh, rows[0].children[2]);
- let g = [];
- // 更新表格
- filteredProblems.forEach((problem, index) => {
- if (index + 1 < rows.length) {
- const rating = problem.rating;
- console.log(`题目名称: ${problem.name}, 比赛ID: ${problem.contestId}, 难度: ${rating}`);
- let row = rows[index + 1];
- let newTd = document.createElement('td');
- if (index % 2 == 0) newTd.style.backgroundColor = "#F0F0F0";
- // 根据 rating 设置字体颜色
- if (rating < 1200) {
- newTd.style.color = 'gray';
- } else if (rating < 1400) {
- newTd.style.color = 'green';
- } else if (rating < 1600) {
- newTd.style.color = 'cyan';
- } else if (rating < 1900) {
- newTd.style.color = 'blue';
- } else if (rating < 2100) {
- newTd.style.color = 'orange';
- } else if (rating < 2300) {
- newTd.style.color = '#FF8C00';
- } else if (rating < 2600) {
- newTd.style.color = 'lightcoral';
- } else if (rating < 3000) {
- newTd.style.color = 'red';
- } else {
- newTd.style.color = '#8B0000';
- }
- newTd.textContent = rating === Infinity ? '***' : rating;
- row.insertBefore(newTd, row.children[2]);
- g.push({ row : row, rating : rating });
- }
- });
- console.log(g);
- // 按钮点击事件逻辑
- let ascending = false; // 用于跟踪排序顺序
- sortButton.addEventListener('click', function() {
- let head = rows[0];
- console.log(head);
- // 对 g 数组按 rating 进行排序
- const sortedG = g.sort((a, b) => ascending ? a.rating - b.rating : b.rating - a.rating);
- // 更新表格,保留表头
- const tbody = table.querySelector('tbody');
- // 清空 tbody 中的行,但保留表头
- tbody.innerHTML = '';
- tbody.appendChild(head);
- // 重新插入排序后的行
- sortedG.forEach(item => {
- tbody.appendChild(item.row);
- });
- console.log(g);
- ascending = !ascending; // 切换排序状态
- sortButton.textContent = ascending ? 'DESC' : 'AESC'; // 更新按钮文本
- });
- });
- })();
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址